一、同步下載(交互不好,容易出現卡死現象,一般下載數據較小或有特定需求才使用)。
//第一步:創建URL
NSURL *pURL = [NSURL URLWithString:URL];
//第二步:創建一個請求
NSURLRequest *pRequest = [NSURLRequest requestWithURL:pURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//第三步:建立連接
NSError *pError = nil;
NSURLResponse *pRespond = nil;
//向服務器發起請求(發起之後,線程就會一直等待服務器響應,直到超出最大響應時間)
NSData *pData = [NSURLConnection sendSynchronousRequest:pRequest returningResponse:&pRespond error:&pError];
//輸出獲取結果
NSLog(@"pData = %@",pData);
//輸出錯誤信息
NSLog(@"pError = %@",[pError localizedDescription]);
二、異步下載
異步下載支持應用程序在後台下載數據,在等待下載完成的過程中不會阻塞代碼的運行,異步連接步驟如下:
/*異步請求*/
//1.獲取網絡資源路徑(URL)
NSURL *pURL1 = [NSURL URLWithString:URL];
//2.根據URL創建請求
NSURLRequest *pRequset1 = [NSURLRequest requestWithURL:pURL1 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//3.(與同步請求的區別點)發起請求,通過委托模式回調完成數據獲取
[NSURLConnection connectionWithRequest:pRequset1 delegate:self];
注意:在異步請求中使用了NSURLConnectionDataDelegate協議,委托對象為自己。其中有四個經常用到的方法,我們將獲得的數據放在self.pData中,其類型為 NSMutableData 。
//1.服務器響應回調的方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"服務器響應");
self.pData = [NSMutableData dataWithCapacity:5000];
}
//2.服務返回數據,客戶端開始接受(data為返回的數據)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"服務器返回數據");
//將返回數據放入緩存區
[self.pData appendData:data];
}
//3.數據接受完畢回調的方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"數據接受完畢");
NSLog(@"pData = %@",self.pData);
}
//4.接受數據失敗時候調用的方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"數據接受失敗,失敗原因:%@",[error localizedDescription]);
}