你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> IOS 同步請求和異步請求

IOS 同步請求和異步請求

編輯:關於IOS

下課了,坐下來靜靜的總結一下今天學的內容
首先是 同步請求和異步請求

同步請求,
使用主線程一次性獲得所有請求數據,這就導致一個比較容易出現的問題
當請求的數據比較大時,就會出現卡頓現象,也就是阻塞主線程,這對於
用戶體驗來說不太好

異步請求
異步請求就是再創建一個線程,使用這個線程進行請求數據,逐步請求數據,
這樣就可以不斷獲得數據然後進行界面更新,不至於造成卡頓現象

我們以請求一個URL鏈接來作為例子

同步請求
//定義一個宏
#define kURL @"http://www.baidu.com"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];

//創建URL
NSURL *mURL = [NSURL URLWithString:kURL];

//創建一個請求,最大請求時間為20秒
NSURLRequest *requrst = [NSURLRequest requestWithURL:mURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20];

//同步請求返回的參數
NSURLResponse *response = nil;
NSError *error = nil;
//建立連接,下載數據,同步請求
NSData *data = [NSURLConnection sendSynchronousRequest:requrst returningResponse:&response error:&error];

//打印服務器傳回得數據
NSLog(@"data = %@",data);
//打印請求出錯時的出錯信息
NSLog(@"error is %@",[error localizedDescription]);

[self.window makeKeyAndVisible];
return YES;
}

下面看同樣情況下異步請求
首先得遵守協議 NSURLConnectionDataDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];

//同樣先生成一個URL
NSURL *pURL = [NSURL URLWithString:kURL];

//創建一個請求
NSURLRequest *Pequest = [NSURLRequest requestWithURL:pURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20];
//發起請求,通過委托模式回調
[NSURLConnection connectionWithRequest:Pequest delegate:self];

[self.window makeKeyAndVisible];
return YES;
}

//下面就是實現協議中的方法了

#pragma 服務器開始響應
//服務器響應回調
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"服務器響應");
//創建一個空的data
self.mData = [NSMutableData data];

}

//服務器返回數據 data為返回數據,注意這裡不一定是一次性返回所有數據
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"服務器返回數據");
[self.mData appendData:data];
}

//數據接收完畢
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"數據接收完畢");
//打印收到的數據
NSLog(@"data = %@",self.mData);
}

//數據失敗所調用的方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"數據接收失敗,失敗原因%@",[error localizedDescription]);
}

至此就是異步請求了,可一邊接受數據一邊用接受的數據更新界面信息,不至於必須要接受完數據
才能進行界面更新。

以上就是同步請求和異步請求

總結未完,轉下篇關於對服務器的兩種請求方法GET 和 POST

鏈接:http://blog.csdn.net/lc_obj/article/details/17604539

寫給自己 ―― LC

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved