一:簡介ios
在ios開發中,通常狀況下,簡單的向某個web站點簡單的頁面提交請求並獲取服務器的響應,用xcode自帶的NSURLConnection是能勝任的。可是,在絕大部分下咱們所須要訪問的web頁面則是屬於那種受到權限保護的頁面,並非有一個簡單的URL能夠訪問的。這就涉及到了Session和Cookie的處理了,在此時使用NSURLConnection也是可以達到要求的,只是其中處理起來的複雜度和難度就提高了。 爲了更好的處理向Web站點的請求,包括處理Session,Cookie等細節問題,使用AFNetworking則是更好的選擇,他能夠用於發送HTTP請求,接收HTTP的響應,可是不會緩存服務器的響應,不能執行HTML頁面中的JAvascript代碼,同時,AFNetworking還內置支持JSON,plist文件和XML文件的解析,使用比較方便。 git
擴展:一、Session:中文有譯做時域的,就是隻某個客戶端在訪問服務器起到中止訪問這一段的時間間隔被稱爲時域。 github
二、Cookie:由服務器發送給客服端,把Cookie的key:value值儲存在本地文件夾下,當下次請求的時候可以直接發送Cookie得到權限驗證 web
博客源地址:http://386502324.blog.163.com/blog/static/1134693772015522115237696/xcode
二:綜述
如下就是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 等參數了。這就是綜述所說的下降耦合性的方式。基本使用很簡單,這裏就再也不贅述了。
參考AFNetworking 3.0遷移指南緩存