IOS 同步請求和異步請求 ios開發教程

下課了,坐下來靜靜的總結一下今天學的內容服務器

首先是 同步請求和異步請求app

同步請求,異步

使用主線程一次性得到全部請求數據,這就致使一個比較容易出現的問題ide

當請求的數據比較大時,就會出現卡頓現象,也就是阻塞主線程,這對於spa

用戶體驗來講不太好線程

異步請求ip

異步請求就是再建立一個線程,使用這個線程進行請求數據,逐步請求數據,同步

這樣就能夠不斷得到數據而後進行界面更新,不至於形成卡頓現象it

咱們以請求一個URL連接來做爲例子io

同步請求

//定義一個宏

#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:

//打印服務器傳回得數據

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]);

}

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

才能進行界面更新。

相關文章
相關標籤/搜索