博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单网络请求封装
阅读量:4562 次
发布时间:2019-06-08

本文共 3076 字,大约阅读时间需要 10 分钟。

////  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

 

转载于:https://www.cnblogs.com/jorgon-skyline/p/4678666.html

你可能感兴趣的文章
第四阶段组队训练赛第八场
查看>>
Angularjs笔记(五)
查看>>
多租户
查看>>
IIS下安装Joomla的注意事项
查看>>
转帖 使用eclipse创建之前没有创建的web.xml
查看>>
前端开发之JavaScript
查看>>
intellij idea 如何更改比编辑器文本字体和大小
查看>>
Unity3D脚本中文系列教程(一)
查看>>
Java50道经典习题-程序25 根据输入求输出
查看>>
加载静态文件,父模板的继承和扩展
查看>>
Watto and Mechanism CodeForces - 514C (字典树,哈希)
查看>>
js里面“===”与“==”的区别
查看>>
关于开发ActiveX 控件的安装问题
查看>>
2019春第六周作业
查看>>
elasticsearch单机与服务器环境搭建
查看>>
tab 被字面的意思迷惑了,DBA_TAB_PRIVS
查看>>
Oracle数据库中分区表的操作方法
查看>>
Set和HashSet LinkedHashSet
查看>>
Django:评论文章后局部刷新评论区
查看>>
0.数据结构学习笔记大纲
查看>>