网络请求
#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(@"下载完成") ;
}];

浙公网安备 33010602011771号