為什么要用AFNetworking?
1、帶block形式贡定, 內(nèi)部是任務隊列進行下載 而芥,就是對operation的一個封裝下載。
2耕姊、還對uikit 內(nèi)部的類進行類別形式添加方法(異步下載圖片)桶唐。
3、還可以檢測網(wǎng)絡狀態(tài)茉兰。
ASI 以前使用比較多得一個下載開源庫尤泽,現(xiàn)在已經(jīng)不維護了,ASI 使用的時候要導入很多庫 比較麻煩第一點规脸。
AFNetWorking處理網(wǎng)絡請求
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
所有的網(wǎng)絡請求,均有manager發(fā)起坯约。
取消任務
[manager.operationQueue cancelAllOperations];
擴展:
1、Session:中文有譯作時域的燃辖,就是指某個客戶端在訪問服務器起到停止訪問這一段的時間間隔被稱為時域鬼店。
2网棍、Cookie:由服務器發(fā)送給客服端黔龟,把Cookie的key:value值儲存在本地文件夾下,當下次請求的時候能夠直接發(fā)送Cookie獲得權限驗證
主要組成:
1:AFURLConnectionOperation
可以說是AFN最基礎的類滥玷。繼承自NSOperation類氏身,將網(wǎng)絡請求依附到一個operation上。從而讓我們能夠有效的控制并觀察一個網(wǎng)絡請求的創(chuàng)建惑畴、進行蛋欣、取消、完成如贷、?暫拖莼ⅲ恢復到踏、異常等問題及狀態(tài)。
2:AFHTTPRequestOperation
HTTP或HTTPS協(xié)議請求的AFURLConnectionOperation的子類尚猿。它封裝的可接受狀態(tài)碼和內(nèi)容的類型窝稿,判定一個請求結果是成功或失敗。
實際上對系統(tǒng)的HTTP網(wǎng)絡請求增加了幾個HTTP需要用到的參數(shù)凿掂。
3:AFHTTPRequestOperationManager
這個類是AFN類庫的核心類伴榔。它封裝完成了一種通用的模式,可以幫助我們輕松友好的完成請求的創(chuàng)建庄萎、響應的系列化踪少,網(wǎng)絡狀態(tài)的監(jiān)控以及安全策略以及每一個請求operation的管理(operation的相互依賴或狀態(tài)改變)。
4:AFURLSessionManager
iOS7 之后糠涛,蘋果增加了新的網(wǎng)絡請求類--NSURLSession援奢。AFN官方推薦iOS 7 或者 Mac OS X 10.9以上的,最好使用該類發(fā)起網(wǎng)絡請求脱羡,取代AFHTTPRequestOperationManager萝究。不過基于目前國內(nèi)app大都最低適配的 iOS6,該類的用途還不是太廣泛锉罐。NSURLSession的說明或者使用不再贅述帆竹。自行查看API文檔。以后有時間再加上該類的使用脓规。
5:AFNetworkReachabilityManager
網(wǎng)絡的連通狀態(tài)監(jiān)控以及網(wǎng)絡的類型栽连。實際是將蘋果官方提供的Reachability的類名和通知名更換了一下,防止和系統(tǒng)提供的類的通知名以及類名的沖突侨舆。
6:AFURLRequestSerialization
①:符合這個協(xié)議的對象用于處理請求秒紧,它將請求參數(shù)轉換為 query string 或是 entity body 的形式,并設置必要的 header挨下。
②:構建multipart請求熔恢。
7:AFURLResponseSerialization
遵循AFURLResponseSerialization協(xié)議的對象,用于驗證臭笆、序列化響應及相關數(shù)據(jù)叙淌,轉換為有用的形式,比如 JSON 對象愁铺、圖像鹰霍、甚至基于mantle的模型對象。
代碼請求過程:
使用AFNetworking發(fā)送請求茵乱、接收響應很簡單茂洒,只要如下幾步
1.創(chuàng)建AFHTTPRequestOperationManager對象
2.根據(jù)服務器響應內(nèi)容的不同,為AFHTTPRequestOperationManager對象指定不同的解析器瓶竭。
該對象默認的解析器要求服務器響應是JSON數(shù)據(jù)或Plist數(shù)據(jù)督勺。
如果服務器響應數(shù)據(jù)是其他格式的渠羞,則需要手動設置響應解析器。
3.如果需要發(fā)送GET請求智哀,調(diào)用AFHTTPRequestOperationManager對象的GET:parameters:success:failure:方法即可;
如果要發(fā)送POST請求,調(diào)用該對象的POST:parameters:success:failure:方法即可.兩個方法都可指定通信成功堵未、通信失敗的代碼塊。
4.在success:參數(shù)指定的代碼塊中處理服務器響應成功的正確數(shù)據(jù)盏触;在failure:參數(shù)指定的代碼塊中處理服務器響應的錯誤數(shù)據(jù)渗蟹。
基本架構:
首先,AFNetworking是封裝的NSURLSession的網(wǎng)絡請求赞辩。
其次雌芽,AFNetworking由五個模塊組成:
NSURLSession:網(wǎng)絡通信模塊(核心模塊) 對應 AFNetworking中的 AFURLSessionManager和對HTTP協(xié)議進行特化處理的AFHTTPSessionManager,AFHTTPSessionManager是繼承于AFURLSessionmanager的;
Security:網(wǎng)絡通訊安全策略模塊 ?對應 AFSecurityPolicy辨嗽;
Reachability:網(wǎng)絡狀態(tài)監(jiān)聽模塊 對應AFNetworkReachabilityManager世落;
Serialization:網(wǎng)絡通信信息序列化、反序列化模塊 對應 AFURLResponseSerialization糟需;
UIKit:對于IOSUIKit的擴展庫屉佳;
NSURLSession網(wǎng)絡請求的過程:
-->創(chuàng)建NSURLSessionConfig對象
-->用創(chuàng)建的config對象配置初始化NSURLSession
-->創(chuàng)建NSURLSessionTask對象并resume執(zhí)行,用delegate或者block回調(diào)返回數(shù)據(jù)洲押。
AFURLSessionManager封裝了上述網(wǎng)絡交互功能武花。
AFURLSessionManager請求過程:
1.初始化AFURLSessionManager。
2.獲取AFURLSessionManager的Task對象
3.啟動Task
AFURLSessionManager會為每一個Task創(chuàng)建一個AFURLSessionmanagerTaskDelegate對象杈帐,manager會讓其處理各個Task的具體事務体箕,從而實現(xiàn)了manager對多個Task的管理
初始化好manager后,獲取一個網(wǎng)絡請求的Task挑童,生成一個Task對象累铅,并創(chuàng)建了一個AFURLSessionmanagerTaskDelegate并將其關聯(lián),設置Task的上傳和下載delegate站叼,通過KVO監(jiān)聽download進度和upload進度