现在的位置: 首页 > 综合 > 正文

通过 NSURLConnection实现 同步/ 异步 请求 (WXHL)

2013年04月21日 ⁄ 综合 ⁄ 共 2591字 ⁄ 字号 评论关闭

#import "UIImageView+WebCach.h"

@implementation UIImageView (WebCach)

- (void)setImageWithURL:(NSURL *)url {

   
    //-----------------NSURLConnection同步请求-----------------------
    //使用同步请求
//    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;
   
    //-----------------NSURLConnection异步请求-----------------------
   
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setHTTPMethod:@"GET"];
    [request setURL:url];
    [request setTimeoutInterval:60];
    
    //发送异步请求
//    [NSURLConnection connectionWithRequest:request delegate:self];
    
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    //发送异步请求
 [NSURLConnection sendAsynchronousRequest:request
                                       queue:queue
                           completionHandler:^(NSURLResponse* respone, NSData* data, NSError* error){
  //该block是多线程调用的
   UIImage *image = [UIImage imageWithData:data];
                              
//    [self performSelectorOnMainThread:@selector(<#selector#>) withObject:<#(id)#> waitUntilDone:<#(BOOL)#>];
//跳到主线程上去操作UI
   dispatch_async(dispatch_get_main_queue(), ^{
   self.image = image;
    });
                              
    }];
   
}
////---------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// 还有一种实现异步请求的方式, 通过实现以下四个代理方法:
9./**  
10. *    
11. *实现必要的方法  
12. **/  
13. 
14. 
15.// -------------------------------------------------------------------------------  

16.//  connection:didReceiveResponse:response 通过response的响应,判断是否连接存在  
17.// -------------------------------------------------------------------------------  

18.-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{  

19.      
20.}  
 
24.//  connection:didReceiveData:data,通过data获得请求后,返回的数据,数据类型NSData  
25.// -------------------------------------------------------------------------------  

26.-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{        

31.}  
 
33.//  connection:didFailWithError:error 返回的错误信息    
36.-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{  

37.      
38.}    
40.//  connectionDidFinishLoading:connection 数据请求完毕,这个时候,用法是多线程的时候,通过这个通知,关部子线程  

41.// -------------------------------------------------------------------------------  

42.-(void)connectionDidFinishLoading:(NSURLConnection *)connection{  
43.      
44.} 

 

@end

抱歉!评论已关闭.