AFNetworking實現(xiàn)原理剖析

AFNetworking:(鎖用的是NSLock,SDWebImage鎖信號量)

AFNetworking是封裝的NSURLSession的網(wǎng)絡(luò)請求,線程NSOperation 最大并發(fā)數(shù)1,保證 ?每一個網(wǎng)絡(luò)請求的串行進行(先來后到順序執(zhí)行)

self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue];

把session中所有taskData都是異步執(zhí)行,相當(dāng)于一個異步線程,所以這個方法意思就是把session的線程執(zhí)行交給個這個operationQueue隊列來進行執(zhí)行session的線程。

AFNetworking由五個模塊組成:

分別由NSURLSession,Security安全策略,Reachability網(wǎng)絡(luò)環(huán)境監(jiān)測,Serialization請求頭和響應(yīng)體 設(shè)置,UIKit五部分組成

NSURLSession:網(wǎng)絡(luò)通信模塊(核心模塊) 對應(yīng) AFNetworking中的 AFURLSessionManager是對HTTP協(xié)議進行特化處理的

AFHTTPSessionManager是繼承于AFURLSessionmanager的

Security:網(wǎng)絡(luò)通訊安全策略模塊 ?對應(yīng) AFSecurityPolicy ——> https請求安全證書問題,私有公鑰證書驗證

Reachability:網(wǎng)絡(luò)狀態(tài)監(jiān)聽模塊 對應(yīng)AFNetworkReachabilityManager

Seriaalization:網(wǎng)絡(luò)通信信息序列化、反序列化模塊 對應(yīng)

? ? ? ? 1>AFURLRequestSerialization?:設(shè)置請求頭屬性&參數(shù)

? ? ? ? ?2>AFURLResponseSerialization:響應(yīng)體信息——>解析json&XML?

UIKit:對于iOS UIKit的擴展庫


網(wǎng)絡(luò)請求的過程

創(chuàng)建NSURLSessionConfig對象--用創(chuàng)建的config對象配置初始化NSURLSession--創(chuàng)建NSURLSessionTask對象并resume執(zhí)行,用delegate或者block回調(diào)返回數(shù)據(jù)。

AFURLSessionManager封裝了上述網(wǎng)絡(luò)交互功能

AFURLSessionManager請求過程

1.初始化AFURLSessionManager。

2.AFURLSessionManager的屬性NSURLSession會根據(jù)request生產(chǎn)——>Task任務(wù)對象

3.啟動Task任務(wù)

AFURLSessionManager會

為每一個Task創(chuàng)建一個AFURLSessionmanagerTaskDelegate對象,代理對象內(nèi)實現(xiàn)了Session的請求代理,并且 執(zhí)行該請求的task的?uploadProgressBlock、downloadProgressBlock、completionHandler 三個block回調(diào)

每個dateTask任務(wù)的唯一IDtaskIdentifier系統(tǒng)自動分配的

每個dateTask的taskDescription任務(wù)描述為 代理對象的 指針地址,每次任務(wù)請求完

可變字典里存儲? 任務(wù)代理對象 (字典:taskDescription為key,代理對象為value),任務(wù)請求完后 ——>字典就移除這個 任務(wù)代理對象。

manager會讓其處理各個Task的具體事務(wù),從而實現(xiàn)了manager對多個Task的管理

初始化好manager后,獲取一個網(wǎng)絡(luò)請求的Task,生成一個Task對象,并創(chuàng)建了一個AFURLSessionmanagerTaskDelegate并將其關(guān)聯(lián),設(shè)置Task的上傳和下載delegate,通過KVO監(jiān)聽download進度和upload進度

NSURLSessionDelegate的響應(yīng)

因為AFURLSessionmanager所管理的AFURLSession的delegate指向其自身,因此所有的

NSURLSessiondelegate的回調(diào)地址都是AFURLSessionmanager,而AFURLSessionmanager又會根據(jù)是否需要具體處理會將AF delegate所響應(yīng)的delegate,傳遞到對應(yīng)的AF delegate去

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

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

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