参考文章1, apple文档

一、NSURLSessionConfiguration

  介绍:分别配置每一个 session 对象。(NSURLConnection 很难做到)

  分类:

    1) defaultSessionConfiguration: 默认 session 配置,类似 NSURLConnection 的标准配置,使用硬盘来存储缓存数据。

    2) backgroundSessionConfiguration: 后台session配置,与默认配置类似,不同的是会在后台开启另一个线程来处理网络数据。

      注意: 这里如果设置了超时限制的话,可能会导致一直下载失败。因为后台下载会根据设备的负载程度决定分配下载的资源。

    3) ephemeralSessionConfiguration: 临时session配置,与默认配置相比,这个配置不会将缓存、cookie等存在本地,只会存在内存里,所以当程序退出时,所有的数据都会消失。

二、NSURLSessionTask

  介绍:使用 NSURLSessionTask 来具体执行网络请求的任务。NSURLSessionTask 支持网络请求的取消、暂停和恢复。

  分类:

    1) NSURLSessionDataTask: 处理一般的 NSData 数据对象,从服务器获取 JSON 或 XML 等,但不支持后台获取。

    2) NSURLSessionDownloadTask: 用于下载文件,支持后台下载。

    3) NSURLSessionUploadTask: 用于上传文件,支持后台上传。

三、NSSession

  总的来说,创建一个 session,需要配置 configuration 和 task。

四、实践总结

  在两年前我使用了 ASI 有半年时间,后来看到已经没再继续维护了,就用了 apple 原生的 NSURLConnection,而且用了适配器模式写得。所以为了兼容以前的版本,我是使用 delegate 的方式来实现回调处理的。(其实 AFNetworking 2.0 已经支持了 NSURLSession,想使用第三方框架的可以考虑。)

  

  1、断点下载

创建 task 的时候 

NSData* downloadedData = ...  // 上一次中断下载时候,保存的临时文件。

httpTask = [httpSession downloadTaskWithResumeData: downloadedData];

中断 task

 [httpTask cancelByProducingResumeData:^(NSData *resumeData) {

// 把 resumeData 存到了一个临时文件上,以便 app 完全关闭后,也能继续断点下载。

}];

 在下载完成的时候

-(void) URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {

 记得把下载过程中用来存储 resumeData 的临时文件给删除掉。

}

最新文章

  1. 希尔排序(java)
  2. SQL Server 2012基本知识
  3. iOS UITableView删除cell分割线
  4. Xcode8 适配iOS10时遇见的一些问题
  5. C# 计算字符串在控制台中的显示长度
  6. Google的Java开发规范
  7. css中的一些兼容问题
  8. Android Studio 快捷键 for mac
  9. Maven 依赖管理
  10. .Net中Math.Round与四舍五入
  11. 基于CAShapeLayer以及UIBezierPath的语音输入效果动画封装
  12. android5.0问题
  13. TCP/IP 网络精讲:OSI七层模型(第二课)
  14. 正则表达式小结(Regular Expressions)
  15. firebird常用语句
  16. OpenID Connect:OAuth 2.0协议之上的简单身份层
  17. BZOJ 2084: [Poi2010]Antisymmetry [Manacher]
  18. JavaScript正则表达式模式匹配(4)——使用exec返回数组、捕获性分组和非捕获性分组、嵌套分组
  19. Python:bs4中 string 属性和 text 属性的区别及背后的原理
  20. Confluence 6 SQL Server 数据库驱动修改

热门文章

  1. 无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用)
  2. 简单修改hosts文件加快打开网页速度
  3. contentprovider的学习实例总结
  4. 2016.6.21 PHP与MqSQL交互之图片读取
  5. .NET 4.0中的泛型的协变和逆变
  6. POJ1850 Code(组合+康托展开)
  7. fireBug使用指南
  8. CSS3选择器(一)之基本选择器
  9. QTabWiget Change Color 改变颜色
  10. Resources