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

一:聲明
最近準備把ASI網絡請求類庫換成AFN。所以準備好好研究一下AFNetworing這個類庫。網上也肯定會有更好的介紹AFN的博客文章,希望大家辯證閱讀,取之精華,去其糟粕,。
由於無法跨平臺轉載,在此貼出網易博客源地址: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將一些設置提取出來,線程了專門的類【AFSecurityPolicy、AFURLRequestSerialization、AFURLResponseSerialization】。現在看來,AFN整體的設計是非常完美的。耦合性變得非常低,一些1.0版本中存在的問題也得到了改善。

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

③:接口文件.h
接口文件中,我們可以看到。這個類可以設置AFSecurityPolicy、AFURLRequestSerialization、AFURLResponseSerialization 等參數了。這就是綜述所說的降低耦合性的方式。基本使用很簡單,這裏就不再贅述了。
四:補充
再次聲明:由於無法跨平臺轉載, 本文是粘自網易博客,原文鏈接在此:http://386502324.blog.163.com/blog/static/1134693772015522115237696/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章