//// HTTPRequset.h// 请求类分装//// Created by qianfeng on 15-7-26.// Copyright (c) 2015年 qq. All rights reserved.////通过代理和block实现函数回调,可选其一#import#import @class HTTPRequset;@protocol HTTPRequsetDelegate @optional/** 进度的回调 */- (void)requestDidProgress:(CGFloat)progress;//请求完成的回调- (void)requestDidfinish:(HTTPRequset *)httprequest;/** 请求完成的回调 */- (void)requestDidError:(NSError *)error;@end/** 请求类 */@interface HTTPRequset : NSObject/** 网络请求返回数据源 */@property(nonatomic,strong) NSData * responseData;/** 字符串形式 */@property(nonatomic,copy ) NSString * reponseString;/** 代理 */@property(nonatomic,assign)id delegate;/** 使用block实现回调下载进程 */@property(nonatomic,copy) void(^requestDidProgressBlock)(CGFloat progress);/** 使用block实现回调对象 */@property(nonatomic,copy) void(^requestDidFinishBlock)(HTTPRequset * request);/** 使用block实现回调错误信息 */@property(nonatomic,copy) void(^requestDidErrorBlock)(NSError * error);/** 构造方法 */- (id)initWithUrl:(NSURL *)url;/** 开始网络请求 */- (void)startRequest;@end
//// HTTPRequset.m// 请求类分装//// Created by qianfeng on 15-7-26.// Copyright (c) 2015年 qq. All rights reserved.//#import "HTTPRequset.h"@interface HTTPRequset (){ NSURL * _url; //保存下载数据 NSMutableData * _downloadData; //总大小 long long _fileSizeBytes;}@end@implementation HTTPRequset- (id)initWithUrl:(NSURL *)url{ self = [super init]; if (self) { _url = url; _downloadData = [NSMutableData data]; } return self;}- (void)startRequest{ NSURLRequest * request = [NSURLRequest requestWithURL:_url]; [NSURLConnection connectionWithRequest:request delegate:self];}#pragma mark - 代理方法- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ //清空数据 _downloadData.length = 0; //获取文件总大小 _fileSizeBytes = [response expectedContentLength];}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ //追加 [_downloadData appendData:data]; //计算进度 float progress = (float) _downloadData.length / _fileSizeBytes; if ([self.delegate respondsToSelector:@selector(requestDidProgress:)]) { [self.delegate requestDidProgress:progress]; } self.requestDidProgressBlock(progress); }- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ //请求取消 [connection cancel]; // _responseData = _downloadData; _reponseString = [[NSString alloc]initWithData:_downloadData encoding:NSUTF8StringEncoding]; self.requestDidFinishBlock(self); if ([self.delegate respondsToSelector:@selector(requestDidfinish:)]) { [self.delegate requestDidfinish:self]; } }- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ //请求取消 [connection cancel]; self.requestDidErrorBlock(error); if ([self.delegate respondsToSelector:@selector(requestDidError:)]) { [self.delegate requestDidError:error]; } }@end