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
- 可以发送cancel/resume/suspend消息
- NSURLSessionDataTask - 返回NSData
- NSURLSesssionDownloadTask - 返回(临时)文件,下载进度可以恢复
- NSURLSessionUploadTask - 上传NSData/File/Stream
- Task默认都是挂起的,记得要向task发resume消息
最后附上NSURLConnection to NSURLSession delegate methods Mapping Table by Mattt Thompson