NSURLSessionConfiguration API详解
2016-01-08 15:16
260 查看
一、NSURLSessionConfiguration的描述NSURLSessionConfiguration为NSURLSession配置一些请求所需要的策略。如:超时、缓存策略、链接需求的。NSURLSession会拷贝configuration。所以session一旦初始化结束就不会再更改configuration。除非初始化一个session。重要:如果NSURLRequest中也做了一些指定。session也会遵循NSURLRequest的限定,但是如果configuration有更加严格的限定,仍以configuration为主。二、defaultSessionConfiguration 默认配置使用的是持久化的硬盘缓存,存储证书到用户钥匙链。存储cookie到shareCookie。标注:如果想要移植原来基于NSURLConnect的代码到NSURLSession,可使用该默认配置,然后再根据需要定制该默认配置。三、ephemeralSessionConfiguration 返回一个不适用永久持存cookie、证书、缓存的配置,最佳优化数据传输。标注:当程序作废session时,所有的ephemeral session 数据会立即清除。此外,如果你的程序处于暂停状态,内存数据可能不会立即清除,但是会在程序终止或者收到内存警告或者内存压力时立即清除。四、backgroundSessionConfigurationWithIdentifier 生成一个可以上传下载HTTP和HTTPS的后台任务(程序在后台运行)。在后台时,将网络传输交给系统的单独的一个进程。重要:identifier是configuration的唯一标示,不能为空或nil.工作状态:如果程序是被系统正常终止的和重新启动,可以使用同一个identifier创建configuration和session,并且能恢复终止时的传输状态。如果程序是被用户在手动退出的,session会取消所有的后台任务,届时不能再唤醒application,如果想要再次开始传输,必须用户手动开启application。属性介绍:
简短说明:1,如果没有找到对应的request的cache信息,则去请求原始数据。2,如果cache信息没有指明要重新生成,并且cache没有过期,返回cache response。3,如果cache过期或者需要重新生成,系统会发送一个HEAD请求去验证cache是否改变。如果改变,拉去原始数据;反之,返回cache response。
@property(readonly, copy) NSString *identifier如果在后台任务正在传输时程序退出,可以使用这个identifier在程序重新启动是创建一个新的configuration和session关联之前传输。
@property(copy) NSDictionary *HTTPAdditionalHeaders默认为空,NSURLRequest附件的请求头。这个属性会给所有使用该configuration的session生成的tasks中的NSURLRequest添加额外的请求头。重要:不要修改一下请求头
Authorization
Connection
Host
WWW-Authenticate如果这里边添加的请求头跟NSURLRequest中重复了,侧优先使用NSURLRequest中的头。
@property NSURLRequestNetworkServiceType networkServiceType指定网络传输类型。精切指出传输类型,可以让系统快速响应,提高传输质量,延长电池寿命等。enum{NSURLNetworkServiceTypeDefault=0,普通网络传输,默认使用这个NSURLNetworkServiceTypeVoIP=1,网络语音通信传输,只能在VoIP使用NSURLNetworkServiceTypeVideo=2,影像传输NSURLNetworkServiceTypeBackground=3,网络后台传输,优先级不高时可使用。对用户不需要的网络操作可使用NSURLNetworkServiceTypeVoice=4语音传输};typedefNSUIntegerNSURLRequestNetworkServiceType;
@property BOOL allowsCellularAccess是否使用蜂窝网络,默认是yes.
@property NSTimeInterval timeoutIntervalForRequest给request指定每次接收数据超时间隔,如果下一次接受新数据用时超过该值,则发送一个请求超时给该request。默认为60s
@property NSTimeInterval timeoutIntervalForResource给指定resource设定一个超时时间,resource需要在时间到达之前完成。默认是7天。
@property(copy) NSString *sharedContainerIdentifier如果要为app的插件提供session,需要给这个值赋值
@property NSHTTPCookieAcceptPolicy HTTPCookieAcceptPolicy默认值是NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain,如果想更多的cookie控制,可以使用NSHTTPCookieAcceptPolicyNever,配合
allHeaderFields跟NSHTTPCookie中方法cookiesWithResponseHeaderFields:forURL:提取cookie。
typedef enum { NSHTTPCookieAcceptPolicyAlways, NSHTTPCookieAcceptPolicyNever, NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain} NSHTTPCookieAcceptPolicy;
@property(retain) NSHTTPCookieStorage *HTTPCookieStorage存储cookie,清除存储,直接set为nil即可。对于默认和后台的session,使用sharedHTTPCookieStorage。对于短暂的session,cookie仅仅储存到内存,session失效时会自动清除。
@property BOOL HTTPShouldSetCookies默认为yes,是否提供来自shareCookieStorge的cookie,如果想要自己提供cookie,可以使用HTTPAdditionalHeaders来提供。
@property(retain) NSURLCredentialStorage *URLCredentialStorage证书存储,如果不使用,可set为nil.默认和后台session,默认使用的sharedCredentialStorage.短暂的session使用一个私有存储在内存中。session失效会自动清除。
@property(retain) NSURLCache *URLCache缓存NSURLRequest的response。默认的configuration,默认值的是sharedURLCache。后台的configuration,默认值是nil短暂的configuration,默认一个私有的cache于内存,session失效,cache自动清除。
@property NSURLRequestCachePolicy requestCachePolicy缓存策略,默认值是NSURLRequestUseProtocolCachePolicy enum{NSURLRequestUseProtocolCachePolicy=0,NSURLRequestReloadIgnoringLocalCacheData=1,不理会cacheNSURLRequestReloadIgnoringLocalAndRemoteCacheData=4,//Unimplemented NSURLRequestReloadIgnoringCacheData=NSURLRequestReloadIgnoringLocalCacheData,不理会cacheNSURLRequestReturnCacheDataElseLoad=2,返回cache,未命中则拉去远程数据NSURLRequestReturnCacheDataDontLoad=3,拉去数据,未命中,不做操作NSURLRequestReloadRevalidatingCacheData=5//Unimplemented };typedefNSUIntegerNSURLRequestCachePolicy;下图是NSURLRequestUseProtocolCachePolicy的流程图:
![](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/Art/http_caching_2x.png)
@property BOOL sessionSendsLaunchEvents表示当后台传输结束时,是否启动app.这个属性只对
backgroundSessionConfigurationWithIdentifier:生效,其他configuration类型会自动忽略该值。默认值是YES。
@property(getter=isDiscretionary) BOOL discretionary是否由系统根据性能自动裁量后台任务。默认值是NO。同sessionSendsLaunchEvent一样,只对后台configuration有效。如果传输的是大数据,最好设置成YES。让系统在最佳性能是安排任务。这属性仅当application在前台时会有用。到后台时系统会默认它的值是YES。
@property(copy) NSArray <Class> *protocolClasses处理NSURLRequest的NSURLProtocol的子类。重要:对后台Session失效。
@property NSInteger HTTPMaximumConnectionsPerHost同时连接一个host的最大数。iOS默认是4.APP是作为一个整体来看的。
@property BOOL HTTPShouldUsePipelining默认值是NO。
@property(copy) NSDictionary *connectionProxyDictionary默认值是NULL。
相关文章推荐
- iOS NSURLSession
- NSURLSession强引用问题
- Xcode7环境下,NSURLSession/NSURLConnection HTTP load failed
- NSURLSession简介(NSURLSession使用说明及后台工作流程分析)
- iOS URL Loading System
- NSURLSession简介
- iOS开发系列--网络开发
- NSURLSession的未来
- iOS中NSURLSession的使用
- 关于NSURLSession的基本使用
- NSURLSession的学习和使用
- NSURLSession详解
- NSURLSession
- iOS9.0-Xcode7-UIWebView加载页面出错解决方法,适用于SDWebImage等一切BitCode和Https相关错误
- iOS 7系列译文:忘记NSURLConnection,拥抱NSURLSession吧!
- iOS NSURLSession
- iOS - NSURLSession实现断点续传下载
- iOS网络编程(六) NSURLSession详解
- NSURLSession学习笔记(一)简介
- NSURLSession学习笔记(二)Session Task