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;
设置请求和对应的缓存的交互方式。相关流程如下图所示

屏幕快照 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;
用于配置代理信息

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容