AFN小結 1,AFN概念、原理 2,AFN的封裝使用 3,AFN與其它框架對比 ————————————————————————————————— 1 , AFN的概念原理: AFN的基礎是NSURL,AFN的直接操作對象AFHTTPClient是一個實現了NSCoding和NSCopying協議 ...
AFN小結
1,AFN概念、原理
2,AFN的封裝使用
3,AFN與其它框架對比
—————————————————————————————————
1 , AFN的概念原理:
AFN的基礎是NSURL,AFN的直接操作對象AFHTTPClient是一個實現了NSCoding和NSCopying協議的NSObject子類。AFHTTPClient是一個封裝了一系列操作方法的“工具類”,處理請求的操作類是一系列單獨的,基於NSOperation封裝的,AFURLConnectionOperation的子類。AFN的示例代碼中通過一個靜態方法,使用dispatch_once()的方式創建AFHTTPClient的共用實例,這也是官方建議的使用方法。在創建AFHTTPClient的初始化方法中,創建了OperationQueue並設置一系列參數預設值。在getPath:parameters:success:failure方法中創建NSURLRequest,以NSURLRequest對象實例作為參數,創建一個NSOperation,並加入在初始化發方中創建的NSOperationQueue。以上操作都是在主線程中完成的。
AFNetworking2.0是對 NSURLConnection,NSURLSession的封裝
AFNetworking3.0刪除了了對 NSURLConnection的封裝內容
這是因為NSURLSession能夠完全替代NSURLConnection,並且具有很多優點
- 支持後臺運行的網路任務
- 暫停、停止、重啟網路任務,不需要自己封裝NSOperation
- 支持斷點續傳,非同步下載
- 支持上傳,非同步上傳
- 獲取下載、上傳的進度
————————————————————————————————
2 , AFN的使用及封裝
2 . 1 AFN的直接調用
1. 實例化網路請求管理類.
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2. 選擇請求方法,發送網路請求.
NSString *urlString = @"http://127.0.0.1/resources/vedios.xml";
[manager GET:urlString parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
// 這裡可以獲得請求的進度信息
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 成功的回調,這裡就得到了數據,JSON數據會自動解析
// 如果是XML,HTML或者其它數據,需要選擇不同的解析器
} } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 失敗的回調
}];
2 . 2 AFN的封裝
通過對AFN的封裝類,在項目中把AFN代碼與網路請求的代碼隔離開,這樣做的好處是,一旦AFN出現重大bug或者我們更換另外的第三方網路請求框架時,會比較簡單和方便。可以想象,如果我們自己的項目中到處充斥的都是直接使用AFN網路請求,那麼修改和維護代碼將是多麼的麻煩。
封裝AFN只需要以下3步:
1, 新建一個類,繼承自AFN,如果我們只用到HTTP,可以直接繼承AFHTTPSessionManager
2, 在類中提供一個類方法,用於創建這個類的對象,可以使用單例模式
3, 在類中提供一個對象方法,用於進行網路請求,提供參數,可以進行GET、POST、HEAD等請求。
具體示例demo放在壓縮包文件,可以下載查看。
————————————————————————————————-
3 , AFN與其它框架對比
* AFNetWorking:簡單易用,提供了基本夠用的常用功能,有人更新和維護,而且目前使用者很多 。其相關資料,文檔,demo很多,很好找遇到問題好解決。
*ASIHttpRequest: ASI的底層基於純C語言的CFNetwork框架,功能很強大,可惜作者已停止更新.
* MKNetWorkKit:簡單易用,維護和使用者少.