NSURLSession的未来

来源:互联网 发布:淘宝可以开发票吗 编辑:程序博客网 时间:2024/04/25 08:15

Cocoa网络框架的未来:NSURLSession

NSURLConnection大概有10年的历史了,很多api的设计都比较陈旧,否则AFNetworking不会这么火。好在苹果在iOS 7/Mavericks 引入了新的网络类NSURLSession,用以替代NSURLConnection。

新的网络框架设计中,原有的NSURL/NSURLRequest/NSURLResponse这些类及相关概念都得以沿用;除了支持iOS 7的一新新特性(background download/upload),与AFNetworking 1.x很多api设计非常相似。

NSURLSession

  • Foundation中NSURLConnection的替代
  • 支持后台运行的网络任务
  • 暂停、停止、重启网络任务,不再需要NSOperation封装
  • 请求可以使用同样的配置容器中
  • 不同的session可以使用不同的私有存储
  • block和委托可以同时起作用
  • 直接从文件系统上传下载

NSURLSessionConfiguration

  • defaultSessionConfiguration - 缓存、cookie、证书全局非私有;近似于NSURLConnection
  • ephemeralSessionConfiguration - 缓存、cookie、证书全局私有但非持久化(in memory)
  • backgroundSessionConfiguration - 适合于应用被挂起或收到remote notification

NSURLSessionConfiguration的一些properties

摘录一些常用的:

  • HTTPAdditionalHeaders: HTTP协议头部信息
  • allowsCellularAccess/discretionary: 前者允许运营商网络/后者对于后台网络任务进行优化(有WiFi/设备电量情况好的时候)
  • timeoutIntervalForRequest/timeoutIntervalForResource: 前者每次有新data到达时重置;后者限制了整个资源请求时长,不要搞混了
  • HTTPMaximumConnectionsPerHost: 对于一个host的最大并发连接数

NSURLSessionTask

继承关系如图(image from objc.io)
NSURLSessionTask继承关系

  • 可以发送cancel/resume/suspend消息
  • NSURLSessionDataTask - 返回NSData
  • NSURLSesssionDownloadTask - 返回(临时)文件,下载进度可以恢复
  • NSURLSessionUploadTask - 上传NSData/File/Stream
  • Task默认都是挂起的,记得要向task发resume消息

最后附上NSURLConnection to NSURLSession delegate methods Mapping Table by Mattt Thompson

0 0
原创粉丝点击