ios中AFUrlConnection 和AFsession區(qū)別以及相關(guān)原理

AFNetworking 1.0是建立在NSURLConnection的基礎(chǔ)API上的 。

AFNetworking 2.0開始使用NSURLConnection的基礎(chǔ)API ,以及較新基于NSURLSession的API的選項。AFNetworking 3.0現(xiàn)已完全基于NSURLSession的API,這降低了維護(hù)的負(fù)擔(dān),同時支持蘋果增強(qiáng)關(guān)于NSURLSession提供的任何額外功能。由于Xcode 7中,NSURLConnection的API已經(jīng)正式被蘋果棄用。雖然該API將繼續(xù)運行,但將沒有新功能將被添加,并且蘋果已經(jīng)通知所有基于網(wǎng)絡(luò)的功能,以充分使NSURLSession向前發(fā)展。

在AFNetworking3.0中下面這些類已被廢棄:AFURLConnectionOperation,AFHTTPRequestOperation,AFHTTPRequestOperationManager。

這些類包含基于NSURLConnection的API的內(nèi)部實現(xiàn),他們已經(jīng)被使用NSURLSession重構(gòu):UIImageView+AFNetworking,UIWebView+AFNetworking,UIButton+AFNetworking。


??主要框架:網(wǎng)絡(luò)通信模塊NSUrlSession,網(wǎng)絡(luò)狀態(tài)監(jiān)聽模塊:Reachability,網(wǎng)絡(luò)通信安全模塊:Security,網(wǎng)絡(luò)通信序列化模塊:Serialization,對UIKit擴(kuò)展部分:UiKit。。

???? AFNetworking3.0實現(xiàn)機(jī)制

AFNetworking 3.0 實現(xiàn)完全基于NSURLSessionTask進(jìn)行封裝,NSURLSessionTask 是蘋果在iOS7 推出的網(wǎng)絡(luò)請求api。AF支持https,網(wǎng)絡(luò)數(shù)據(jù)請求,文件上傳,文件下載,監(jiān)聽手機(jī)網(wǎng)絡(luò)狀態(tài)。AFHttpSessionManager 繼承 AFURLSessionManager 對網(wǎng)絡(luò)請求進(jìn)行管理,使用AFURLRequestSerialization 對網(wǎng)絡(luò)請求進(jìn)行封裝,使用AFURLReponseSerialization 響應(yīng)體進(jìn)行處理,使用AFSecurityPolicy 對服務(wù)器證書進(jìn)行校驗。支持https協(xié)議,支持本地證書和服務(wù)器證書進(jìn)行對比驗證,AF要求ios7或以上系統(tǒng)。AF數(shù)據(jù)傳遞主要使用block 和 notifacation的方式。

???AFHTTPRequestOperationManager原理:

初始化manager之后,請求方式和解析方式設(shè)置了默認(rèn)值,也可以修改為自己的請求方式和解析方式,然后會將當(dāng)前任務(wù)添加進(jìn)操作隊列。AFHTTPRequestOperation繼承AFURLConnection,并且實現(xiàn)了相關(guān)的代理。當(dāng)operation啟動的時候start方法被調(diào)用,operationDIdstart方法會在【self class】返回線程中被調(diào)用。。這個新的小線程即AFNetworking,他在創(chuàng)建的時候就啟動了一個runloop事件循環(huán),并添加了一個NSMachPort空端口,其目的就是用來維護(hù)runloop的執(zhí)行不被退出。當(dāng)網(wǎng)絡(luò)請求數(shù)據(jù)到達(dá)的時候,網(wǎng)絡(luò)請求是個異步的過程,當(dāng)網(wǎng)絡(luò)請求數(shù)據(jù)流到達(dá)的時候,runloop會監(jiān)聽到事件源。。AFUrlConnectionOperation中的代理方法receive data也會被調(diào)用,網(wǎng)絡(luò)數(shù)據(jù)流也會寫進(jìn)緩存,寫入緩存完成后,didfinishloading會調(diào)用,self.state=AFOperationFinishedState,表示該請求任務(wù)已經(jīng)請求,而這個操作還坐了一個KVO操作,方法監(jiān)聽state狀態(tài)改變,然后回歸主線程,AFURLConnectionOperation中setCompletionBlock方法被回調(diào)。。self.completionBlock中內(nèi)容被執(zhí)行,這里邊id responseObject = self.responseObject獲得解析數(shù)據(jù),將stream中的數(shù)據(jù)解析成Json、xml,然后AFHTTPRequestOperation方法setCompletionBlockWithSuccess一回調(diào)。通常這個success block做我們自己處理的。


???AFHTTPSessionManager原理:

蘋果已經(jīng)對NSURLSessionDataTask做了高度封裝,原理跟AFURLConectionOperation差不多,到一個網(wǎng)絡(luò)數(shù)據(jù)流到達(dá)的時候,NSURLSession的URLSession:direceivedata方法就會被激活。AFURLSessionManager實現(xiàn)了NSURLSession的代理,AFURLSessionMnager代理方法會被調(diào)用。這樣網(wǎng)絡(luò)數(shù)據(jù)就被寫入self.mutableData,當(dāng)數(shù)據(jù)獲取完成之后URLSession:task:didcompleteWithError方法會調(diào)用,data=【self.mutabledata copy】,網(wǎng)絡(luò)數(shù)據(jù)會被copy到data中,網(wǎng)絡(luò)數(shù)據(jù)解析成了我們最終獲取到的數(shù)據(jù)。。self.completionHandler執(zhí)行代碼塊就回到了AFHTTPSessionManager的方法success? failure block就會被調(diào)用。

最后編輯于
?著作權(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)容

  • 在蘋果徹底棄用NSURLConnection之后自己總結(jié)的一個網(wǎng)上的內(nèi)容,加上自己寫的小Demo,很多都是借鑒網(wǎng)絡(luò)...
    付寒宇閱讀 4,529評論 2 13
  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會牽扯到網(wǎng)絡(luò)開發(fā),例如說新浪微博、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 4,046評論 2 7
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,628評論 30 472
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中。。。 其實如果沒有APIManager這一層是沒法使用delegate的,畢竟多個單...
    yhtang閱讀 5,493評論 1 23
  • 寫在開頭: 大概回憶下,之前我們講了AFNetworking整個網(wǎng)絡(luò)請求的流程,包括request的拼接,sess...
    涂耀輝閱讀 20,107評論 53 315

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