本文將從最簡單的GET請求方法的使用入手,由表及裡,逐步探究AFNetworking如何封裝處理原生的網路請求。 一、AFNetworking的簡單使用 Post、Put、Delete 與此Get類似 二、AFNetworking如何封裝的呢? AFNetworking的封裝分為 Task(任務) ...
本文將從最簡單的GET請求方法的使用入手,由表及裡,逐步探究AFNetworking如何封裝處理原生的網路請求。
一、AFNetworking的簡單使用
-(void)getDemo{
AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
NSDictionary *dict = @{
@"username":@"testPara",
@"pwd":@"testPara"
};
NSDictionary *headersDict = @{
@"Accept":@"text/html",
@"Connection":@"keep-alive"
};
[manager GET:@"https://www.afntest:8010/test" parameters:dict headers:headersDict progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
Post、Put、Delete 與此Get類似
二、AFNetworking如何封裝的呢?
AFNetworking的封裝分為 Task(任務) 和 Request(請求) 等
2.1 以Get舉例(其他類比)、封裝Get的方法如下
2.2 創建Task(任務)的方法
2.3 創建網路請求的方法
這個方法在AFHTTPRequestSerializer.m裡面
這個是上圖中序列化請求的方法
至此、request的封裝初步完成
2.4 封裝Task(任務)的方法
Task(任務)設置代理回調等
這個圖也是SessionManager與NSURLSessionTask的關聯
2.5 最後,還有一個大問題,AFURLSessionManagerTaskDelegate 是什麼呢?它是怎麼處理task和Manager的呢?
NSURLSession由三個基本模塊構成:
NSURLSession
NSURLSessionConfiguation
NSURLSessionTask
初始化Session時未指定delegate的,通過block回調返回數據。
三、總結
3.0 基於NSURLSession的AFNetworking的UML圖
(只為展示類之間的關聯關係,並沒有給出每個類的所有屬性和方法)
3.1 NSURLSessionTask包括三種Task類型,
分別為:
- NSURLSessionDataTask
- NSURLSessionDownLoadTask
- NSURLSessionUploadTask
3.2 網路請求的過程:
創建NSURLSessionConfig對象–用創建的config對象配置初始化NSURLSession–創建NSURLSessionTask對象並resume執行,用delegate或者block回調返回數據。
AFURLSessionManager封裝了上述網路交互功能
AFURLSessionManager請求過程
1.初始化AFURLSessionManager。
2.獲取AFURLSessionManager的Task對象
3.啟動Task
3.3 AFNetworking由五個模塊組成:
NSURLSession:網路通信模塊(核心模塊) 對應 AFNetworking中的
AFURLSessionManager和對HTTP協議進行特化處理的AFHTTPSessionManager,AFHTTPSessionManager是繼承於AFURLSessionmanager的
Security:網路通訊安全策略模塊 對應 AFSecurityPolicy
Reachability:網路狀態監聽模塊 對應AFNetworkReachabilityManager
Seriaalization:網路通信信息序列化、反序列化模塊 對應 AFURLResponseSerialization
UIKit:對於IOSUIKit的擴展庫