#import <Foundation/Foundation.h> //定义下载中的block typedef void(^ProcessBlock)(NSURLResponse *response,NSData *data,NSError *error); //定义下载完成的block typedef void(^CompletionBlock)(NSURLResponse *response,NSData *data,NSError *error); //接受网络连接协议 @interface CustomConnection : NSURLConnection<NSURLConnectionDataDelegate> + (CustomConnection *)sendAsyRequest:(NSURLRequest *)request andProcessBlock:(ProcessBlock)processblock andCompletionBlock:(CompletionBlock)completionblock; @end
#import "CustomConnection.h" @interface CustomConnection () @property (nonatomic,strong)NSError *error; @property (nonatomic,strong)NSURLResponse *response; @property (nonatomic,strong)NSMutableData *data; @property (nonatomic,strong)CompletionBlock completionBlock;//在这里使用的是strong.引用计数加1(有内存管理) @property (nonatomic,strong)ProcessBlock processBlock; @end @implementation CustomConnection + (CustomConnection *)sendAsyRequest:(NSURLRequest *)request andProcessBlock:(ProcessBlock)processblock andCompletionBlock:(CompletionBlock)completionblock { CustomConnection * connection = [[CustomConnection alloc]initWithRequest:request delegate:nil]; connection.completionBlock = completionblock; connection.processBlock = processblock; [connection start]; return connection; } - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate { //指定当前的网络连接工具类的代理对象是自己 self = [super initWithRequest:request delegate:self]; if (self) { ; } return self; } //收到网络连接响应的时候调用的方法 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { self.response = response; self.data = [[NSMutableData alloc]init]; } ////收到网络链接发送信息时... - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.data appendData:data]; self.processBlock (self.response,self.data,self.error); } //收到网络链接结束信息时... - (void)connectionDidFinishLoading:(NSURLConnection *)connection { self.completionBlock (self.response,self.data,self.error); } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { self.error = error; } @end
在使用的时候,
NSURL *url = [NSURL URLWithString:@"http://www.taopic.com/uploads/allimg/110329/23-11032ZK01593.jpg"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [CustomConnection sendAsyRequest:request andProcessBlock:^(NSURLResponse *response, NSData *data, NSError *error) { UIImageView *imageV = [[UIImageView alloc]initWithImage:[UIImage imageWithData:data]]; imageV.frame = self.view.bounds; [self.view addSubview:imageV]; NSLog(@"下载中") ; } andCompletionBlock:^(NSURLResponse *response, NSData *data, NSError *error) { NSLog(@"下载完成") ; }];