iOS開發(fā)-AFNetworking詳解

這是一篇AFNetworking的詳細(xì)解析

使用示例

新建一個(gè)AFHTTPSessionManager的manager,然后用manager請求對應(yīng)網(wǎng)址的信息,回調(diào)會(huì)調(diào)用success的completionHander代碼塊。

AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
[manager GET:@"www.baidu.com" 
parameters:nil 
progress:nil 
success:^(NSURLSessionDataTask * _Nonnull task,
id  _Nullable responseObject) {
        NSLog(responseObject);
    } failure:nil];

AFNetworking流程圖

Paste_Image.png
  • 調(diào)用post請求
- (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters 
progress:(void (^)(NSProgress * _Nonnull))uploadProgress 
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success 
failure:(void (^)(NSURLSessionDataTask * _Nullable,
 NSError * _Nonnull))failure
  • 新建一個(gè)task
- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method 
URLString:(NSString *)URLString 
parameters:(id)parameters 
uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress 
downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) 
downloadProgress 
success:(void (^)(NSURLSessionDataTask *, id))success 
failure:(void (^)(NSURLSessionDataTask *, NSError *))failure
  • 新建一個(gè)request
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method 
URLString:(NSString *)URLString 
parameters:(id)parameters 
error:(NSError *__autoreleasing *)error
  • 新建一個(gè)dataTask
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request 
uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) 
uploadProgressBlock downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) 
downloadProgressBlock 
completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject
, NSError * _Nullable error))completionHandler
  • 添加delegate
- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask 
uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) 
uploadProgressBlock downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) 
downloadProgressBlock 
completionHandler:(void (^)(NSURLResponse *response
, id responseObject, NSError *error))completionHandler

整體架構(gòu)

  • AFURLSessionManager的mutableTaskDelegatesKeyedByTaskIdentifier屬性,存放著每一個(gè)task對應(yīng)的AFURLSessionManagerTaskDelegate;
  • AFURLSessionManager的NSURLSessionDelegate實(shí)現(xiàn),會(huì)調(diào)用每個(gè)task對應(yīng)的AFURLSessionManagerTaskDelegate;
  • 設(shè)置Task的AFURLSessionManagerTaskDelegate時(shí),用了NSLock,進(jìn)行多線程同步;
  • 任務(wù)的調(diào)度采用了工廠模式、觀察者和代理模式。
    • 工廠模式
      對于HTTP協(xié)議的請求
      AFHTTPRequestSerializer
      AFJSONRequestSerializer
      AFPropertyListRequestSerializer
      三個(gè)都依賴抽象接口AFURLRequestSerialization
      對于HTTP協(xié)議的響應(yīng)
      AFHTTPResponseSerializer
      AFJSONResponseSerializer
      AFXMLParserResponseSerializer
      AFXMLDocumentResponseSerializer
      AFPropertyListResponseSerializer
      AFImageResponseSerializer
      AFCompoundResponseSerializer
      依賴抽象接口 AFURLResponseSerialization
      符合 開放-封閉原則
      對增加新的請求頭、響應(yīng)頭是開放的,而且增加新內(nèi)容不需要修改原內(nèi)容
    • 觀察者模式
      對于task的每個(gè)生命周期,都會(huì)有相應(yīng)的事件發(fā)出
      AFNetworkingTaskDidResumeNotification
      AFNetworkingTaskDidSuspendNotification
      對于task用KVO的方式去監(jiān)聽Progress
    • 代理模式
      AFURLSessionManagerTaskDelegate 是AF對自己的邏輯封裝,同時(shí)實(shí)現(xiàn)了
      NSURLSessionTaskDelegate,
      NSURLSessionDataDelegate
      NSURLSessionDownloadDelegate
      同時(shí)通過實(shí)現(xiàn)NSURLSessionDelegate,來接受session級別的事件。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容