一矾瑰、URL Session的基本概念##
<h2>
1.三種工作模式:
默認(rèn)會話模式(default):工作模式類似于原來的NSURLConnection唇跨,使用的是基于磁盤緩存的持久化策略,使用用戶keychain中保存的證書進(jìn)行認(rèn)證授權(quán)蹂窖。
瞬時(shí)會話模式(ephemeral):該模式不使用磁盤保存任何數(shù)據(jù)。所有和會話相關(guān)的caches,證書赞别,cookies等都被保存在RAM中,因此當(dāng)程序使會話無效配乓,這些緩存的數(shù)據(jù)就會被自動清空仿滔。
后臺會話模式(background):該模式在后臺完成上傳和下載,在創(chuàng)建Configuration對象的時(shí)候需要提供一個(gè)NSString類型的ID用于標(biāo)識完成工作的后臺會話犹芹。
2.NSURLSession支持的三種任務(wù)
NSURLSession類支持三種類型的任務(wù):加載數(shù)據(jù)崎页,下載和上傳。
allowsCellularAccess與discretionary屬性的區(qū)別###
<h2><code>
allowsCellularAccess 屬性指定是否允許使用蜂窩連接腰埂, discretionary屬性為YES時(shí)表示當(dāng)程序在后臺運(yùn)作時(shí)由系統(tǒng)自己選擇最佳的網(wǎng)絡(luò)連接配置飒焦,該屬性可以節(jié)省通過蜂窩連接的帶寬。在使用后臺傳輸數(shù)據(jù)的時(shí)候屿笼,建議使用discretionary屬性牺荠,而不是allowsCellularAccess屬性翁巍,因?yàn)樗鼤裌iFi和電源可用性考慮在內(nèi)。補(bǔ)充:這個(gè)標(biāo)志允許系統(tǒng)為分配任務(wù)進(jìn)行性能優(yōu)化志电。這意味著只有當(dāng)設(shè)備有足夠電量時(shí)曙咽,設(shè)備才通過Wifi進(jìn)行數(shù)據(jù)傳輸。如果電量低挑辆,或者只僅有一個(gè)蜂窩連接例朱,傳輸任務(wù)是不會運(yùn)行的。后臺傳輸總是在discretionary模式下運(yùn)行鱼蝉。
</code>
三種創(chuàng)建方式的區(qū)別###
<h2>
第一種方式是使用靜態(tài)的sharedSession方法洒嗤,該類使用共享的會話,該會話使用全局的Cache魁亦,Cookie和證書渔隶。
第二種方式是通過sessionWithConfiguration:方法創(chuàng)建對象,也就是創(chuàng)建對應(yīng)配置的會話洁奈,與NSURLSessionConfiguration合作使用间唉。
第三種方式是通過sessionWithConfiguration:delegate:delegateQueue方法創(chuàng)建對象,二三兩種方式可以創(chuàng)建一個(gè)新會話并定制其會話類型利术。
該方式中指定了session的委托和委托所處的隊(duì)列呈野。當(dāng)不再需要連接時(shí),可以調(diào)用Session的invalidateAndCancel直接關(guān)閉印叁,或者調(diào)用finishTasksAndInvalidate等待當(dāng)前Task結(jié)束后關(guān)閉被冒。
這時(shí)Delegate會收到URLSession:didBecomeInvalidWithError:這個(gè)事件。Delegate收到這個(gè)事件之后會被解引用轮蜕。