NSURLSession系列(一) - NSURLConfiguration

前言:iOS開(kāi)發(fā)從業(yè)這幾年來(lái)都沒(méi)有好好總結(jié)下?,F(xiàn)在把知識(shí)梳理一下,助人助己~

NSURLSession講的是什么

學(xué)習(xí)NSURLSession時(shí)到底在學(xué)習(xí)什么?通常情況我們會(huì)從網(wǎng)上找一篇教程,拷一段簡(jiǎn)易代碼去執(zhí)行,比如:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:@"https://www.baidu.com"]];
[task resume];

但是為什么這么寫(xiě)?每個(gè)類(lèi)的作用是什么?想要深入探究時(shí),會(huì)發(fā)現(xiàn)繁多復(fù)雜的方法不知道如何開(kāi)始。有種老虎吃天的感覺(jué)。
慌亂后會(huì)發(fā)現(xiàn),NSURLSession就是客戶(hù)端如何與服務(wù)器交換數(shù)據(jù)。也就是客戶(hù)端如何生產(chǎn)數(shù)據(jù)、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、處理服務(wù)器返回的數(shù)據(jù)。當(dāng)找到一個(gè)現(xiàn)實(shí)中的物理模型時(shí)就輕松多了。可以理解為NSURLSession是一個(gè)工廠(chǎng),它生產(chǎn)數(shù)據(jù)、發(fā)送數(shù)據(jù)、處理收到的數(shù)據(jù)。
NSURLConfiguration是工廠(chǎng)的設(shè)計(jì)圖,NSURLSession就是具體工廠(chǎng)。每個(gè)Session對(duì)象都要有一個(gè)Configuration設(shè)計(jì)圖來(lái)指導(dǎo)建成。工廠(chǎng)建成后就可以生產(chǎn)不同的產(chǎn)品,即NSURLSessionTask對(duì)象。當(dāng)然產(chǎn)品有多種,具體什么產(chǎn)品由當(dāng)時(shí)的業(yè)務(wù)決定。

NSURLSessionConfiguration

在發(fā)送請(qǐng)求前必須要?jiǎng)?chuàng)建一張NSURLSessionConfiguration作為“設(shè)計(jì)圖”。

創(chuàng)建NSURLSessionConfiguration

要?jiǎng)?chuàng)建一張“設(shè)計(jì)圖”,NSURLSessionConfiguration給我們了三個(gè)便捷的類(lèi)方法:

  1. +defaultSessionConfiguration
    創(chuàng)建一個(gè)標(biāo)準(zhǔn)的 configuration。這個(gè)配置與 NSURLConnection是一樣的,會(huì)共享NSHTTPCookieStorage、 NSURLCache和NSURLCredentialStorage。

  2. +ephemeralSessionConfiguration
    創(chuàng)建一個(gè)不會(huì)對(duì)cache、cookie和證書(shū)進(jìn)行持久性的存儲(chǔ)的configuration。其功能就像chrome的無(wú)痕瀏覽。

  3. +backgroundSessionConfiguration:(NSString *)identifier
    創(chuàng)建一個(gè)用于后臺(tái)session的configuration。后臺(tái) session可以在應(yīng)用程序掛起,甚至是退出或者崩潰的情況下運(yùn)行上傳和下載任務(wù)。初始化時(shí)指定的標(biāo)識(shí)符,被用于向任何可能在進(jìn)程外恢復(fù)后臺(tái)傳輸?shù)氖刈o(hù)進(jìn)程(daemon)提供上下文。

配置NSURLSessionConfiguration

NSURLSessionConfiguration共有22個(gè)屬性。cache、cookie和證書(shū)的相關(guān)屬性是我們經(jīng)常用到的,其他的暫不分析。

cookie策略

與cookie相關(guān)的有三個(gè)屬性,如下:

  1. HTTPCookieStorage
    該屬性是一個(gè)NSHTTPCookieStorage對(duì)象,存儲(chǔ)所有經(jīng)過(guò)該session請(qǐng)求的cookie。默認(rèn)使用NSHTTPCookieShorage的+sharedHTTPCookieStorage 這個(gè)單例對(duì)象,也就是說(shuō)所有用該默認(rèn)配置的session其cookie是共享的。這與NSURLConnection是相同的。
  2. HTTPCookieAcceptPolicy
    該屬性是一個(gè)NSHTTPCookieAcceptPolicy枚舉類(lèi)型。有三個(gè)可選值,決定了什么情況下接受從服務(wù)器發(fā)出的cookie。
  3. HTTPShouldSetCookies
    該屬性是BOOL值,指定了請(qǐng)求是否應(yīng)該cookie。默認(rèn)是YES,如果設(shè)為NO,則需要用HTTPAdditionalHeaders或自定義的NSURLRequest來(lái)指定HTTP請(qǐng)求頭里的cookie字段。

緩存策略

與緩存相關(guān)的有兩個(gè)屬性,如下:

  1. URLCache
    該屬性是一個(gè)NSURLCache對(duì)象,存儲(chǔ)經(jīng)過(guò)該session請(qǐng)求所使用的緩存。與cookie類(lèi)似,NSURLCache也有一個(gè)默認(rèn)的+sharedURLCache單例對(duì)象,默認(rèn)使用該單例對(duì)象。因此,默認(rèn)情況下所有session的cache是共享的。這與 NSURLConnection 是相同的。
  2. requestCachePolicy
    該屬性是一個(gè)NSURLRequestCachePolicy枚舉類(lèi)型。指定通過(guò)該session的請(qǐng)求如何處理緩存,比如忽略本地緩存,或強(qiáng)制使用本地緩存等。NSURLRequest的-cachePolicy方法也會(huì)影響緩存,不過(guò)它只影響單個(gè)請(qǐng)求。

安全策略

  1. URLCredentialStorage
    該屬性是一個(gè)NSURLCredentialStorage對(duì)象,存儲(chǔ)了經(jīng)過(guò)該session請(qǐng)求所使用的證書(shū)。與cookie和cache類(lèi)似,默認(rèn)情況下使用NSURLCredentialStorage的 +sharedCredentialStorage單例對(duì)象。
  2. TLSMaximumSupportedProtocol
    該屬性是一個(gè)SSLProtocol枚舉類(lèi)型,決定SSL支持的最高版本
  3. TLSMinimumSupportedProtocol
    與TLSMaximumSupportedProtocol類(lèi)似,該屬性決定SSL支持的最低版本

關(guān)于cookie、cache和證書(shū)相關(guān)的內(nèi)容會(huì)在后續(xù)文章中詳細(xì)說(shuō)明,比如URLCache對(duì)象或HTTPCookieStorage對(duì)象設(shè)置為nil會(huì)如何;NSURLRequest中也會(huì)影響這些屬性,哪個(gè)優(yōu)先級(jí)更高等問(wèn)題。

參考地址:
iOS加載系統(tǒng)的官方地址
其他屬性參考地址
configuration官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • NSURLSession概述1. NSURLSession session類(lèi)型NSURLSession包括下面3種...
    瞎嘚嘚閱讀 1,983評(píng)論 2 2
  • _end
    高冷娟閱讀 168評(píng)論 0 0
  • 炎熱的教室 疲倦的身體 風(fēng)吹過(guò)的書(shū)本 崩潰的大腦 父母臉龐印在腦海 諄諄話(huà)語(yǔ)縈繞耳旁 雖是疲憊 卻又提筆
    沐沐與木木閱讀 254評(píng)論 0 1
  • 2017年11月19日 星期天 晴 今天是懶散的一天,我和閨女睡到了八點(diǎn),不急不慢的起床,洗漱。 閨女開(kāi)始練琴,我...
    四三班可榕媽媽閱讀 347評(píng)論 0 2

友情鏈接更多精彩內(nèi)容