第一、訪問網絡的方式
同步請求:數據的請求過程是由主線程發起的,網絡加載需要一定的時間,因此會堵塞主線程
異步請求:數據的請求在多線程中完成
同步請求無法取消,異步請求的過程中可以取消,同步請求無法監聽加載進度,異步請求可以監聽
第二、訪問網絡的基本流程
構造NSURL實例
生成NSURLRequest請求
通過NSURLConnection發送請求
通過返回NSURLRespond實例和NSErro實例分析結果
接受返回數據
NSURL實例包含了地址信息,如host、scheme、relativePath、port、path
第三、同步請求
[objc]
<span style="font-size:18px"> NSMutableURLRequest *request=[[NSMutableURLRequest alloc] init];
[request setHTTPMethod:@"GET"];
[request setURL:url];
[request setTimeoutInterval:60];
NSURLResponse *response;
NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
UIImage *image=[UIImage imageWithData:data];
self.image=image;
</span>
第四、異步請求
5.0以上支持
[objc] view plaincopyprint?
<span style="font-size:18px">NSMutableURLRequest *request=[[NSMutableURLRequest alloc] init];
[request setHTTPMethod:@"GET"];
[request setURL:url];
[request setTimeoutInterval:60];
NSOperationQueue *queue=[[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request queue: queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
UIImage *image=[UIImage imageWithData:data];
dispatch_sync(dispatch_get_main_queue(), ^{
self.image=image;
});
}];
</span>
5.0一下代碼實現:
[objc]
<span style="font-size:18px">- (void)setURL:(NSURL *)url {
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
//設置請求方式
[request setHTTPMethod:@"GET"];
[request setURL:url];
//設置超時時間
[request setTimeoutInterval:60];
self.data = [NSMutableData data];
//發送一個異步請求
[NSURLConnection connectionWithRequest:request delegate:self];
}
#pragma mark - NSURLConnection delegate
//數據加載過程中調用
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.data appendData:data];
}
//數據加載完成後調用
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
UIImage *image = [UIImage imageWithData:self.data];
self.image = image;
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"請求網絡失敗:%@",error);
}
</span>