在iOS7後,NSURLSession基本代替了NSURLConnection進行網絡開發,在iOS9後,NSURLConnection相關方法被徹底的棄用,iOS系統有向下兼容的特性,儘管NSURLConnection已經被棄用,但在開發中,其方法依然能夠被使用,而且若是須要兼容到很低版本的iOS系統,有時就必須使用NSURLConnection類了。編程
對於網絡請求分爲同步和異步兩種,同步是指在請求結果返回以前,程序代碼會卡在請求處,以後的代碼不會被執行,異步是指在發送請求以後,一邊在子線程中接收返回數據,一邊執行以後的代碼,當返回數據接收完畢後,採用回調的方式通知主線程作處理。網絡
使用以下方法進行NSURLConnection的同步請求:app
NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSLog(@"%@",data); NSLog(@"繼續執行");
打印信息以下圖所示,從中能夠看出,當數據返回結束時才執行後面的代碼:異步
使用同步的方式進行請求有一個很大的弊端,在進行網絡請求時,數據的返回每每須要必定時間,不可能瞬間完成,使用同步的方式將致使界面卡死,沒有提示也不能交互任何用戶操做,這樣的話,頗有可能會給用戶程序卡死的假象。url
NSURLConnection類提供兩種方式進行異步請求操做。spa
使用以下代碼進行block方式的異步請求,在block中會傳入請求到的返回數據和數據信息等參數:線程
NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; //其中的queue參數決定block中的代碼在哪一個隊列中執行 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { NSLog(@"%@",data); }]; NSLog(@"繼續執行");
首先遵照協議與生命一個可變的NSData用於接收數據:代理
@interface ViewController ()<NSURLConnectionDataDelegate> { NSMutableData * _data; } @end
使用以下的代碼進行請求:code
_data = [[NSMutableData alloc]init]; NSURL * url = [NSURL URLWithString:@"http://www.baidu.com"]; NSURLRequest * request = [NSURLRequest requestWithURL:url]; [NSURLConnection connectionWithRequest:request delegate:self];
請求發出後,會一次調用以下代理方法進行請求過程的監聽和數據的獲取:隊列
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ //開始接收數據 [_data setLength:0]; } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ //正在接收數據 [_data appendData:data]; } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ //接收數據失敗 NSLog(@"%@",error); } -(void)connectionDidFinishLoading:(NSURLConnection *)connection{ //接收數據完成 NSLog(@"%@",_data); }
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592