簡述AFN(AFNetWorking 2.X)的實現分析和簡單使用,afnafnetworking

來源:互聯網
上載者:User

簡述AFN(AFNetWorking 2.X)的實現分析和簡單使用【轉】,afnafnetworking

【轉載】

Axc註:版本為AFNetWorking 2.6    3.0需要修改大部分對象

一:聲明
本 人以前一直是使用ASI網路請求類庫的。最近才開始瞭解使用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 等參數了。這就是綜述所說的降低耦合性的方式。基本使用很簡單,這裡就不再贅述了。

四:補充
最近時間較為匆忙,人也有點墮落。寫的不是很詳細,以後還會繼續增加修改,補充一些7、8、9三個類的實現介紹。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.