一脸候、簡介?
一大咱、NSURLRequest
NSURLRequest是個獨立加載請求的解決方法松申,它封裝了兩個基本的元素:請求的URL和相關(guān)的緩存機制NSURLRequestCachePolicy
NSURLRequest中可以添加HTTP相關(guān)的各種首部字段例如HTTPMethod娃闲,Cookie瓶颠,Content-Type等骑晶。
二、NSURLSession和NSURLSessionTask
NSURLSession:?使用者建立起的網(wǎng)絡(luò)對話
NSURLSessionConfiguration是NSURLSession的配置草慧,可以統(tǒng)一配置NSURLSession一些設(shè)置桶蛔。
NSURLSession和廢棄的NSURLConnection的差異:
"NSURLConnection是全局性的,即它的配置對全局有效漫谷,如果有兩個鏈接需要不同的cookies仔雷、證書這些公共資源,則NSURLConnection無法滿足要求舔示,這時NSURLSession的優(yōu)勢則體現(xiàn)出來碟婆,NSURLSession可以同過NSURLSessionConfiguration可以設(shè)置全局的網(wǎng)絡(luò)訪問屬性。"
NSURLSessionTask:?一個具體的網(wǎng)絡(luò)任務(wù)類惕稻,但它是一個抽象類竖共,有許多的子類能實現(xiàn)不同的功能,每個子類也有不同的Delegate協(xié)議俺祠。
NSURLSessionDataTask其中一個子類公给,也是網(wǎng)絡(luò)請求中最常用的請求之一。
NSURLSessionDelegate:?系統(tǒng)有一個全局的NSURLSession單例蜘渣,但是這樣如果想要實現(xiàn)單獨監(jiān)控淌铐,就需要實例化單獨的Session任務(wù),并且通過NSURLSessionDelegate進行監(jiān)聽宋梧。
二匣沼、AFNetworking中的AFURLSessionManager
它負責(zé)請求的建立、管理捂龄、銷毀請求重啟等各種功能。他主要實現(xiàn)了NSURLSession和NSURLSessionTask的封裝加叁。
AFNetworking中有開辟一條常駐線程請求網(wǎng)絡(luò)數(shù)據(jù)倦沧。如果沒有這條線程的話,就會每次請求網(wǎng)絡(luò)就去開辟線程它匕,完成之后銷毀開辟線程展融,這樣就造成資源的浪費,開辟一條常住線程豫柬,就可以避免這種浪費告希,我們可以在每次的網(wǎng)絡(luò)請求都添加到這條線程。
(1)AFURLSessionManager內(nèi)部擁有一個maxConcurrentOperationCount = 1的NSOperationQueue烧给,用于運行本身私有的一個NSURLSessionConfiguration和NSURLSession燕偶。
這個私有的NSURLSession管理了一系列的NSURLSessionDataTask/NSURLSessionUploadTask/
NSURLSessionDownloadTask
(2) 當(dāng)傳入一個request時候,會用一個串行線程同步去創(chuàng)建task并賦予監(jiān)聽狀態(tài)的delegate础嫡,并且讓使用者可以去定義completion等handler指么,也可以實現(xiàn)重定向
3)?AFURLSessionManager對建立的每一個task都分配了響應(yīng)的AFURLSessionManagerTaskDelegate酝惧,遵循了NSURLSessionTaskDelegate,?NSURLSessionDataDelegate,?NSURLSessionDownloadDelegate三個protocol
每個task以task.id為key存儲在一個dictionary中且使用lock來保證讀寫線程安全。
"AFURLSessionManagerTaskDelegate這個類主要是把NSURLSeesion的部分代理方法讓他處理伯诬。從而達到簡化代碼的目的晚唇。"
如何解決session設(shè)置代理之后對代理對象的強引用問題?
(http://www.reibang.com/p/5fd65c20912e)
NSURLSession對象在使用的時候盗似,如果設(shè)置了代理哩陕,那么session對代理對象會保持一個強引用,在合適的時候應(yīng)該主動進行釋放
可以在控制器調(diào)用viewDidDisappear方法的時候來進行處理赫舒,可以通過調(diào)用invalidateAndCancel方法或者是finishTasksAndInvalidate方法來釋放對代理對象的強引用
invalidateAndCancel方法直接取消請求然后釋放代理對象悍及,finishTasksAndInvalidate方法等請求完成之后釋放代理對象。
(4)使用信號量來控制異步的block中可以同步到獲取不同類型的數(shù)組
(5)讓session可以歸檔解檔号阿,實現(xiàn)copy
Reference:?
https://www.cnblogs.com/mddblog/p/5215453.html
https://www.cnblogs.com/HeiNeiKu/p/5628498.html
https://www.cnblogs.com/36bian/p/5237138.html
http://www.cocoachina.com/ios/20161018/17785.html
http://www.reibang.com/p/e15592ce40ae
http://www.reibang.com/p/5fd65c20912e