学习NSURLSession
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习NSURLSession相关的知识,希望对你有一定的参考价值。
NSURLSession 在ios7的时候,推出这个。主要是用来替换NSURLConnection。
NSURLSession是一组相互依赖的类,它的大部分组件和NSURLConnection中的组件相同如NSURLRequest,NSURLCache等。而NSURLSession的不同之处在于,它将NSURLConnection替换为NSURLSession和NSURLSessionConfiguration,以及3个NSURLSessionTask的子类:NSURLSessionDataTask, NSURLSessionUploadTask, 和NSURLSessionDownloadTask。
关于图例:
NSURLSession由NSURLSessionConfiguration和可选代理(optional delegate)构成。再根据你的网络需求通过NSURLSessionTask来创建session。
1、NSURLSessionConfiguration
简介
-
NSURLSessionConfiguration主要用于配置NSURLSession会话属性,其工作模式主要有三种:
-
默认模式(defaultSessionConfiguration):使用硬盘来缓存数据,可以使用缓存的Cache,Cookie,鉴权。
-
及时模式(ephemeralSessionConfiguration): 临时session配置,与默认配置相比,这个配置不会将缓存、cookie等存在本地,只会存在内存里,所以当程序退出时,所有的数据都会消失
-
后台模式(backgroundSessionConfiguration):在后台完成上传下载,创建Configuration对象的时候需要给一个NSString的ID用于追踪完成工作的Session是哪一个。 做远程push通知或是应用程序挂起的时候就要用到这个configuration。
-
常用属性
-
identifie:设置后台任务的标识符
-
requestCachePolicy:设置缓存策略
-
timeoutIntervalForRequest:设置请求超时时长
-
networkServiceType:设置网络服务类型
-
HTTPAdditionalHeaders:设置头部参数
-
allowsCellularAccess:设置是否在非无线的情况下请求网络(使用蜂窝数据)
-
HTTPMaximumConnectionsPerHost:设置主机网络连接个数
-
discretionary: discretionary属性为YES时表示当程序在后台运作时由系统自己选择最佳的网络连接配置,该属性可以节省通过蜂窝连接的带宽。在使用后台传输数据的时候,建议使用
discretionary
属性,而不是allowsCellularAccess
属性,因为它会把WiFi和电源可用性考虑在内。这个标志允许系统为分配任务进行性能优化。这意味着只有当设备有足够电量时,设备才通过Wifi进行数据传输。如果电量低,或者只仅有一个蜂窝连接,传输任务是不会运行的。后台传输总是在discretionary模式下运行。
常用方法
- setHTTPAdditionalHeaders:设置头部/参数
// 设置所有的请求只接收JSON数据;
// 设置网络请求api所需的头部参数;
[configuration setHTTPAdditionalHeaders:@{@"Accept": @"application/json", @"apikey": @"159d95a8c050074fe3ca0df0d901fc62"}];
2、NSURLSession 网络会话
- NSURLSession是为了代替NSURLConnection而设计的。Sessions的所有工作都是通过NSURLSessionTask对象完成。可以用block,delegate,或者两者混合来创建task。
以上是关于学习NSURLSession的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发之网络编程--1NSURLSession的基本使用