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去