NSURLSessionConfiguration官方文档翻译+学习笔记

原文链接
https://developer.apple.com/reference/foundation/nsurlsessionconfiguration

NSURLSessionConfiguration是HTTP操作的策略管理类。管理的内容包括发出请求的超时时间,缓存策略,连接数量,以及操作NSURLSession所需要的其他信息。

概要
在初始化一个session对象之前,对其行适当的配置是非常重要的。Session对象会深拷贝一个开发者设置的Configuration对象,然后根据这个配置来设置session。一旦session设置完毕了,session会忽略后续对Configuration的修改。如果想要让更改的configuration信息生效,那么在更新配置后,需要重新生成对应的session才能让新的配置生效。【所以,在NSURLSession中的configuration的属性是copy,这样才不会让后续的修改对其造成影响】
{注意,在某些情况下,设置在Task里面的某些Configuration的配置可能会被NSURLRequest的配置覆盖。绝大多数通过NSURLRequest进行配置的参数都不会受到影响,除非Session的某些配置原则更加严格。比如说,如果session的配置指明了不能在蜂窝网进行通信,那么无论NSURLRequest如何配置,由NSURLRequest配置的task则肯定不能在蜂窝网内通信}

属性解析

创建配置对象

@property(class, readonly, strong) NSURLSessionConfiguration *defaultSessionConfiguration;
返回一个默认的配置对象,用来配置上传下载任务属性
默认的session配置使用基于硬盘的缓存结构,并且在用户的keychain中存储用户的证书。同时,其使用的Cookie所存放的位置和NSURLConnection以及NSURLDownload类使用的位置都是一样的。如果对这个返回的默认配置进行修改,并不会影响到后续返回的默认设置的配置,也就是说,每个修改都是针对每个对象的,而不会对这个类所返回的默认配置造成任何影响。对返回的某一个类的sessionManager进行修改也并不会影响要其他的session的行为。【这里的设计是处于一个目的,那就是HTTP协议本身就是无状态的协议,也就是说,每次对话都是相对独立的,因此sessionConfiguration本身也都是比较独立的,这里从逻辑上来说,就应该是相互独立的,不存在什么整体配置而言】

@property(class, readonly, strong) NSURLSessionConfiguration *ephemeralSessionConfiguration;
返回的配置对象和default的差不多,但是只有一点,那就是所有的缓存和相关数据都不在磁盘上进行存储,提高安全性,提高了占用的内存,降低了性能。

  • (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier;
    一个和后台下载相关的配置属性,配合属性@discretionary使用,在开启了后台下载的时候,下载过程会在另外一个进程开启。相关流程请参照URLSession Programming guide。

@property(readonly, copy) NSString *identifier;
后台下载的配置对应的id,基本用法就是在App重启的时候,使用这个id获取对应的配置,然后重启对应的后台下载流程

@property(copy) NSDictionary *HTTPAdditionalHeaders;
这个属性可以在对应session中统一配置请求的HTTP头的额外字段。比如说在上传的时候配置dataLength什么的。

@property NSURLRequestNetworkServiceType networkServiceType;
这个属性可以配置网络服务类型,然后操作系统可以根据对应配置的类型来优化自己的操作,比如说是否唤醒WiFi模块,比如说配置通信的优先级等等。

@property BOOL allowsCellularAccess;
一个开关,限制对应的通信是否可以在蜂窝网下进行

@property NSTimeInterval timeoutIntervalForRequest;
设置一个session内,从发起请求开始,到server传送数据的最大时间间隔,当超过这个时间而没有接收到任何新数据的时候,触发超时事件。默认60秒

@property NSTimeInterval timeoutIntervalForResource;
设置一个session内,下载完毕一个资源的最长时间,默认为7天。一般用于后台下载任务

@property(copy) NSString *sharedContainerIdentifier;
用于配置应用扩展的下载路径,和对应组的APP的文件路径

Cookie策略
@property NSHTTPCookieAcceptPolicy HTTPCookieAcceptPolicy;
一个枚举值,三种,分别是保存全部,全部不保存,只保存主域的,默认是第三种

@property(retain) NSHTTPCookieStorage *HTTPCookieStorage;
这个属性可以对Cookie的存储进行配置。如果不想使用Cookie存储,将这个属性设置为nil。对于默认的和后台的session,这个属性的默认值是这个APP对应的共享cookie存储。对于临时session而言,这个cookie是仅存在内存中的一个私有的内存空间,当这个session失效的时候,在内存中对应的cookie也被销毁。

@property BOOL HTTPShouldSetCookies;
发出的HTTP请求是否默认使用Cookie存储中的Cookie信息。如果开发者想自己设置自己的Cookie,请将这个字段设置为NO,然后在HTTPAddtional Header中设置对应的字段,或者每个请求使用个性化的NSURLRequest。【也就是说,在个性化HTTP请求信息的时候,有两个途径,一个是使用NSURLRequest,另外一个是SessionConfiguration。】默认设置为YES。

传输安全设置
@property SSLProtocol TLSMaximumSupportedProtocol;
传输的时候,连接能够使用的TLS协议最大版本号

@property SSLProtocol TLSMinimumSupportedProtocol;
传输的时候,能够使用的TLS协议最小版本号

@property(retain) NSURLCredentialStorage *URLCredentialStorage;
配置证书存放的位置。
如果不想使用证书相关的存储,设置为nil。默认的配置和后台连接的配置,使用一个共享的证书存储文件路径。对于临时session来说,这个存储是只存放在内存中的。随着session失效会被立刻释放。

缓存策略相关
@property(retain) NSURLCache *URLCache;
这个属性可以配置URL对应的缓存。如果不想使用缓存,请设置为nil。对于默认的session来说,默认的数值就是共享的一个URL缓存对象。对于后台下载session来说,这个属性为nil。对于临时session来说,这个就不是共享的了,而且只在内存中提供缓存,如果session失效了,就会被销毁。

@property NSURLRequestCachePolicy requestCachePolicy;
设置请求和对应的缓存的交互方式。相关流程如下图所示

NSURLSessionConfiguration官方文档翻译+学习笔记_第1张图片
屏幕快照 2017-04-07 下午4.04.36.png

后台传输相关设置
@property BOOL sessionSendsLaunchEvents;
当设置为YES的时候,下载完毕后会在后台唤醒APP

@property(getter=isDiscretionary) BOOL discretionary;
当设置为YES的时候,操作系统会在适当的时候开启下载,比如说接入WiFi,比如说当系统负载比较低的时候。默认设置为NO。

HTTP协议以及代理的相关设置
@property NSInteger HTTPMaximumConnectionsPerHost;
这个配置了在当前session的同时连接数量,只是当前session,如果有多个session,则所有session连接到对应host的总数不是通过这个属性进行设置的。这个数值默认为4。

@property BOOL HTTPShouldUsePipelining;
是否在当前session开启Pipeline属性,默认为NO。【扩展:管线化。从前发送请求后需要等待并收到响应才能发送下一个请求。管线化技术出现后,不用等待响应,就能直接发送下一个请求,这样就能做到同时并行发送多个请求,而不需要一个接一个地等待了。用于性能优化】

@property(copy) NSDictionary *connectionProxyDictionary;
用于配置代理信息

你可能感兴趣的:(NSURLSessionConfiguration官方文档翻译+学习笔记)