先来说说普通异步下载方法,分为POST、GET两种

/** GET请求获取数据*/
+ (void)getDataWithUrl:(NSString *)strUrl finishBlock:(ECGNCNSDictionaryAndNSErrorBlock)finishBlock
{if (strUrl.length == 0) {return;}NSURL *url = [NSURL URLWithString:strUrl];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"GET";[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {//解析并回调数据NSDictionary *dicData = [self dictionaryForJsonData:data];if (finishBlock) {finishBlock(dicData, error);}}];[dataTask resume];
}/** POST请求获取数据*/
+ (void)postParam:(NSDictionary *)dicParam toUrl:(NSString *)strUrl finishBlock:(ECGNCNSDictionaryAndNSErrorBlock)finishBlock
{if (dicParam == nil || strUrl.length == 0) {return;}NSURL *url = [NSURL URLWithString:strUrl];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];request.HTTPBody = [self compactFormatDataForDictionary:dicParam];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {//解析并回调数据NSDictionary *dicData = [self dictionaryForJsonData:data];if (finishBlock) {finishBlock(dicData, error);}}];[dataTask resume];
}/** 将字典转换成json格式字符串,不含\n这些符号*/
- (NSData *)compactFormatDataForDictionary:(NSDictionary *)dicJson
{if (![dicJson isKindOfClass:[NSDictionary class]]) {return nil;}NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dicJson options:0 error:nil];if (![jsonData isKindOfClass:[NSData class]]) {return nil;}return jsonData;
}/** 将二进制数据转换成字典*/
- (NSDictionary *)dictionaryForJsonData:(NSData *)jsonData
{if (![jsonData isKindOfClass:[NSData class]] || jsonData.length < 1) {return nil;}id jsonObj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];if (![jsonObj isKindOfClass:[NSDictionary class]]) {return nil;}return [NSDictionary dictionaryWithDictionary:(NSDictionary *)jsonObj];
}

下面说说下载文件的方法

/** 下载文件方法*/
- (void)downLoadFileWithUrl:(NSString *)urlStr finishBlock:(GSNetLibTMIdAndDataAndErrorBlock)finishBlock
{if (urlStr.length == 0) {return;}NSURL *url = [NSURL URLWithString:urlStr];NSURLSession *session = [NSURLSession sharedSession];//构造下载任务NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {//下载成功回调,文件数据会被默认存储在一个临时目录if (error == nil) {if (location != nil && [location path].length > 0) {NSString *tmpFilePath = [location path];NSData *data = [NSData dataWithContentsOfFile:tmpFilePath];//回调数据if (finishBlock) {finishBlock(0, data, error);}//删除临时目录文件NSFileManager *fileMgr = [NSFileManager defaultManager];[fileMgr removeItemAtPath:tmpFilePath error:nil];}}}];//执行任务
    [downloadTask resume];
}

转载于:https://www.cnblogs.com/hecanlin/p/10911370.html

iOS开发之普通网络异步请求与文件下载方法相关推荐

  1. java httpclient 异步请求_java_java实现HttpClient异步请求资源的方法,本文实例讲述了java实现HttpClien - phpStudy...

    java实现HttpClient异步请求资源的方法 本文实例讲述了java实现HttpClient异步请求资源的方法.分享给大家供大家参考.具体实现方法如下: package demo; import ...

  2. iOS开发常用之网络、网页

    网络相关 网络连接 AFNetworking - ASI不升级以后,最多人用的网络连接开源库,iOS的网络编程之AFNetworking使用,iOS的开发下载文件速度计算 , AFNetworking ...

  3. 【IOS开发高级系列】异步绘制专题

    1 图片处理 1.1 编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGIm ...

  4. 【iOS开发】---- Reachability 网络监测

    在开发的过程中,我们需要检测网络状态,比如当前网络状态(连接,断开),网络环境(2G/3G,WIFI)等.苹果提供了一个在iOS环境下检测网络用的库:Reachability.它能方便的监测网络状态, ...

  5. IOS开发控制器之间传值的几种小方法

    在IOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考! 问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值? ...

  6. jQuery使用ajax异步请求400解决方法

    jQuery使用ajax异步请求访问状态码400解决方法: 先直接上结论:首先检查下自己使用的请求方式,我原来用的是post方式,更改为ajax之后就解决了,才反应过来应该是版本不兼容的问题! < ...

  7. iOS开发实践之网络检測Reachability

    在网络应用开发中.有时须要对用户设备的网络状态进行实时监控.以至于对用户进行友好提示 或者依据不同网络状态处理不一样的逻辑(如视频播放app,依据当前的网络情况自己主动切换视频清晰度等等).用Reac ...

  8. iOS开发——openssl生成CSR (pkcs10) 请求证书

    由于涉及在线开户相关,所以整理一下~ 本文在前人的基础上更加完善:通过openssl 生成证书请求CSR  符合pkcs10的语法规范 为客户端生成,代码为C语言,可以直接在xcode的中于objec ...

  9. iOS开发UI中懒加载的使用方法

    1.懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其getter方法.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载 ...

最新文章

  1. 精灵盛典电脑模拟器服务器怎么修改,精灵盛典ios电脑版
  2. Google Python Class --- Sorting
  3. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第7章-二阶时滞多智能体系统分组一致性
  4. Linux下百度网盘一直进入不了登陆界面的解决方案
  5. 推荐系统User-Item Embedding图算法
  6. Scala教程之:Either
  7. window7连接其他计算机的打印机,win7系统电脑怎样连接其它电脑上在打印机?
  8. 郎溪 溪流_到无限(溪流)和超越!
  9. QT 010 Qt 4.2 在线手册含UML图解释 User's Guide Documentation
  10. HDFS某个节点的磁盘满了
  11. HttpClient之Java爬虫工具
  12. C盘下出现msdia80.dll文件
  13. 文件截取\裁剪工具软件
  14. 你不是不优秀,而是太着急
  15. 在最美的时候,你遇见了谁?
  16. NOIP 2012 Senior 2 - 国王游戏
  17. STC12C5A60S2自主适应时钟延时函数
  18. 人像摆姿参考--西野七瀬(1)
  19. 我的暑期实习找工作经历
  20. C++ Opencv imfill 孔洞填充函数的实现(更新后)

热门文章

  1. 词法分析器c语言带注释,C语言词法分析器内容说明注释完整可运行代码.doc-资源下载在线文库www.lddoc.cn...
  2. oracle中order by 2,关于oracle中ROWNUM和ORDER BY的问题(2)
  3. leetcode165. 比较版本号 超级重要的细节
  4. leetcode61 旋转链表
  5. C++(STL):31 ---关联式容器map源码剖析
  6. 创建与打开IPC通道的POSIX和SYSTEM V方法
  7. 《Python Cookbook 3rd》笔记(1.3):保留最近N个元素
  8. 渔翁服务器密码机的环境配置
  9. 如期而至,GCC 4.9.0正式版发布!
  10. 提高编程水平的一段必经之路,研读官方文档