您的位置:首页 > 理论基础 > 计算机网络

网络请求

2014-02-19 14:03 316 查看
#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(@"下载完成") ;

}];


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: