AFNetWorking的實現分析以及簡單使用

一:聲明
本 人之前一直是使用ASI網絡請求類庫的。最近纔開始瞭解使用AFNetworing這個類庫。網上也確定會有更好的介紹AFN的博客文章,但願你們辯證閱 讀,取之精華,去其糟粕。本人的認識可能有錯誤或者不全的地方,還請你們不吝指正。有問題能夠直接在博客留言,不接受QQ詢問。
博客源地址:http://386502324.blog.163.com/blog/static/1134693772015522115237696/

二:綜述
如下就是cocospod中AFNetworing除了幾個分類外的全部類。類庫的頭文件AFNetworking.h引入了下面的全部類庫,並能夠根據不一樣的系統使用不一樣的實現方式。下面大致介紹下每一個類的大體做用,主要以翻譯API的註釋文檔爲主。

1:AFURLConnectionOperation
能夠說是AFN最基礎的類。繼承自NSOperation類,將網絡請求依附到一個operation上。從而讓咱們可以有效的控制並觀察一個網絡請求的建立、進行、取消、完成、暫停恢復、異常等問題及狀態。【第三部分詳細分析實現以及功能】

2:AFHTTPRequestOperation
HTTP或HTTPS協議請求的AFURLConnectionOperation的子類。它封裝的可接受狀態碼和內容的類型,斷定一個請求結果是成功或失敗。
實際上對系統的HTTP網絡請求增長了幾個HTTP須要用到的參數。

3:AFHTTPRequestOperationManager
這個類是AFN類庫的核心類。它封裝完成了一種通用的模式,能夠幫助咱們輕鬆友好的完成請求的建立、響應的系列化,網絡狀態的監控以及安全策略以及每個請求operation的管理(operation的相互依賴或狀態改變)。
【第三部分詳細分析實現以及功能】


4:AFURLSessionManager
iOS7 以後,蘋果增長了新的網絡請求類--NSURLSession。AFN官方推薦iOS 7 或者 Mac OS X 10.9以上的,最好使用該類發起網絡請求,取代AFHTTPRequestOperationManager。不過基於目前國內app大都最低適配的 iOS6,該類的用途還不是太普遍。NSURLSession的說明或者使用再也不贅述。自行查看API文檔。之後有時間再加上該類的使用。

5: AFURLSessionManager
繼承自AFURLSessionManager。相似於1和2的關係。也是方便HTTP以及https請求的使用,增長了一些接口,方便調用。

6:AFNetworkReachabilityManager
網絡的連通狀態監控以及網絡的類型。實際是將蘋果官方提供的Reachability的類名和通知名更換了一下,防止和系統提供的類的通知名以及類名的衝突。

7:AFSecurityPolicy
這個我不太懂,安全策略的類。通常貌似用不到,有須要自行google。。

8:AFURLRequestSerialization

①:符合這個協議的對象用於處理請求,它將請求參數轉換爲 query string 或是 entity body 的形式,並設置必要的 header。
②:構建multipart請求。

9:AFURLResponseSerialization
遵循AFURLResponseSerialization協議的對象,用於驗證、序列化響應及相關數據,轉換爲有用的形式,好比 JSON 對象、圖像、甚至基於mantle的模型對象。

三:重點類的實現分析

1:AFURLConnectionOperation的實現

①:綜述
AFURLConnectionOperation 將Operation和URLConnection結合到一塊兒,利用operation能夠監聽到狀態以及能夠創建相互之間的依賴關係的特性,實現了對於 一個NSURLConnection對象的完美控制,並將請求的結果經過block友好的返回。

②:實現文件.m
咱們總結下.m中這個類主要有哪些方法。
1: 首先咱們能夠看到它建立了一個單例線程。這個線程將會常駐內存,用來處理AFN發起的全部請求任務。固然,線程也跟隨着一個runloop,AFN將這個 runloop的模式設置爲NSDefaultRunLoopMode。NSDefaultRunLoopMode是沒法檢測到connection的狀 態的。這說明了,AFN將不會在這該線程處理connection完成後的UI刷新等工做,而是會將數據拋給主線程,讓主線程去完成UI的刷新。
2:咱們能夠看到該類經過接受請求的字符串,建立了URLRequest以及NSURLConnection對象。從而去進行請求。
3:實現文件屢次使用到了鎖,能夠保證數據的安全。固然他也實現了幾個數據的NSCoping協議。
4:請求的建立、進行、取消、完成、暫停恢復、異常等問題及狀態的控制。這裏講一下暫停和恢復。
暫 停實際上將網絡請求取消掉了。可是因爲實現了nscoping協議,已經下載到數據得以保存下來。下次進行相同請求的時候,咱們會將已經下載到的數據的節 點一塊兒發送給服務器,告訴服務器這些部門的數據咱們不須要了,服務器根據我發送的返回節點給我返回相應的數據便可。從而實現了暫停和恢復功能,也就是斷點 續傳。
5:operation方法的重寫。自行google,這裏不贅述。
6:狀態的各類控制方法的實現以及發送狀態改變的通知

③:接口文件.h
接口文檔中的屬性方法,基本能夠歸納爲如下幾個方法
1:只讀的數據,讓管理者能夠接收到。
2:設置runloop的modes。再也不使用類庫默認設置的defaultmodes。
3:狀態的控制方法
4:安全策略的設置
總而言之,接口文件.h暴露的接口都是爲了讓manager能夠去徹底控制這個operation以及其中的網絡請求。

2:AFHTTPRequestOperationManger

①:綜述
這個類能夠說是整個類庫的核心類了。聽說AFN2.0以前的時候,全部的網絡請求相關的設置都雜糅到一個client中,致使client特別的臃腫。2.0後,AFN將一些設置提取出來,線程了專門的類【AFSecurityPolicyAFURLRequestSerializationAFURLResponseSerialization】。如今看來,AFN總體的設計是很是完美的。耦合性變得很是低,一些1.0版本中存在的問題也獲得了改善。

②:實現文件.m
實現文件較爲簡單,能夠看到他建立了一個隊列。並將各個operation加入到隊列中。在隊列中,各個請求就能夠設置依賴關係,併發的數量等等。

③:接口文件.h
接口文件中,咱們能夠看到。這個類能夠設置AFSecurityPolicyAFURLRequestSerializationAFURLResponseSerialization 等參數了。這就是綜述所說的下降耦合性的方式。基本使用很簡單,這裏就再也不贅述了。

四:補充
最近時間較爲匆忙,人也有點墮落。寫的不是很詳細,之後還會繼續增長修改,補充一些七、八、9三個類的實現介紹。
安全

相關文章
相關標籤/搜索