- AFNetWorking的介紹
a) 這是一個適用于蘋果平臺開發(fā)的網(wǎng)絡庫,基于Foundation URL Loading System上進行了一套封裝,并且提供了豐富且優(yōu)美的API接口給使用者使用
b) 從github上面的star數(shù)量(2.7W)來說,就知道它是又多么的受歡迎,可以說做蘋果app開發(fā),對于URL Session的編程是不可缺少的
c) - AFNetWorking的版本說明
a) AFN2.0的使用要求:iOS6,Xcode5以上,基于NSURLConnection和NSURLSession構(gòu)建。
b) AFN3.0的使用要求:iOS7以及Xcode7以上,刪除了已廢棄的的基于NSURLConnection的API,完全基于NSURLSession構(gòu)建,降低了以后的維護負擔,同時NSURLConnection的API從Xcode7開始已經(jīng)被蘋果公司廢棄,建議都基于NSURLSession進行網(wǎng)絡操作。 - AFNetworkReachabilityManager
a) 網(wǎng)絡的連通狀態(tài)監(jiān)控以及網(wǎng)絡的類型。實際是將蘋果官方提供的Reachability的類名和通知名更換了一下,防止和系統(tǒng)提供的類的通知名以及類名的沖突。狀態(tài)有:《未知、無連接、WWAN(蜂窩網(wǎng))、WIFI》
b) 一般寫到AppDelegate的入口函數(shù),startMonitoring,檢測到的網(wǎng)絡狀態(tài)經(jīng)過block返回 - 安全策略:AFN支持SSL綁定的HTTPS安全鏈接通信。也可以使用無效的證書https,使用方法:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES; // 允許無效證書 - AFNetWorking的封裝
其實AFN的使用非常簡單方便,但是為了app解除對于afn的依賴,對于網(wǎng)絡請求還是進行了簡單的封裝。一般封裝的網(wǎng)絡功能工具類,使用單例模式,主要有POST請求和GET請求,和afn一樣,使用block返回數(shù)據(jù)和狀態(tài)。還要一些其他的功能,比如上傳文件和緩存。關(guān)于app中各模塊的網(wǎng)絡請求,就基于封裝的網(wǎng)絡工具類創(chuàng)建各模塊的分類,進行統(tǒng)一管理網(wǎng)絡請求。 - AFNetworking FAQ
a) dispatch_queue_t使用@property時提示必須為strong,以為iOS6開始dispatch_queue_t被當做對象處理。
b) ANF利用NSURLCache提供緩存功能,只要NSURLRequest對象具有正確的高速緩存策略,并且服務器響應包含高速緩存控制頭,那么響應將自動緩存以供后后續(xù)請求使用
c) OAuth可以使用AFOAuth1Client和AFOAuth2Client - 常見的序列號和反序列化的錯誤
a) AFN支持接收的數(shù)據(jù)類型有限,但是我們可以自己在響應器里添加類型,是一個數(shù)據(jù)類型文本集合
b) AFN默認成功的回調(diào)是把返回的數(shù)據(jù)當成JSON來解析,這里我們可以修改響應器為默認的,自己解析
c) AFN默認向服務器發(fā)送的是普通的二進制數(shù)據(jù),當我們需要發(fā)送JSON數(shù)據(jù)時,可以修改請求器為JSON類型的
- AFNetwoking的原理
使用AFHTTPSessionManager進行網(wǎng)絡請求,其實現(xiàn)最終是調(diào)用了父類AFURLSessionManager,而AFURLSessionManager內(nèi)部聲明NSURLSession的屬性,并聲明了NSURLSession的代理,最終的網(wǎng)絡操作還是由NSURLSession來實現(xiàn)。AFNetworking對數(shù)據(jù)的解析方式默認是json解析,默認的代理操作隊列最大的并發(fā)操作數(shù)為1是讓所有請求的發(fā)起和等待網(wǎng)絡響應均在同一條線程中執(zhí)行,而不用為每一個請求都新建一條線程,這樣節(jié)約了很多資源。在響應到達后,會執(zhí)行一系列的代理回調(diào),執(zhí)行數(shù)據(jù)的解析,返回數(shù)據(jù),然后使用通知中心將請求完成的消息傳遞到主線程去。