第一、訪問網絡的方式
同步請求:數據的請求過程是由主線程發起的,網絡加載需要一定的時間,因此會堵塞主線程 異步請求:數據的請求在多線程中完成 同步請求無法取消,異步請求的過程中可以取消,同步請求無法監聽加載進度,異步請求可以監聽 第二、訪問網絡的基本流程 構造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>