AFNetworking3.0的基本使用方法


前一段時間在做項目的時候發現AFNetworking3.0已經被大眾所接受,所以以后肯定會有很多程序猿朋友必須了解和轉移至3.0了,這是我這段時間使用和學習總結出來的一些常用的知識點,希望對大家有用。

AFNetworking是一款在OS X和iOS下都令人喜愛的網絡庫。為了迎合iOS新版本的升級, AFNetworking在3.0版本中刪除了基於 NSURLConnection API的所有支持。如果你的項目以前使用過這些API,建議您立即升級到基於 NSURLSession 的API的AFNetworking的版本。

NSURLConnection的API已廢棄

AFNetworking 1.0建立在NSURLConnection的基礎API之上 ,AFNetworking 2.0開始使用NSURLConnection的基礎API ,以及較新基於NSURLSession的API的選項。 AFNetworking 3.0現已完全基於NSURLSession的API,這降低了維護的負擔,同時支持蘋果增強關於NSURLSession提供的任何額外功能。由於Xcode 7中,NSURLConnection的API已經正式被蘋果棄用。雖然該API將繼續運行,但將沒有新功能將被添加,並且蘋果已經通知所有基於網絡的功能,以充分使NSURLSession向前發展。

AFNetworking 2.X將繼續獲得關鍵的隱患和安全補丁,但沒有新的功能將被添加。Alamofire(Swift下的網絡請求)軟件基金會建議,所有的項目遷移到基於NSURLSession的API。

棄用的類

下面的類已從AFNetworking 3.0中廢棄:

  • AFURLConnectionOperation
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

修改的類

下面的類包含基於NSURLConnection的API的內部實現。他們已經被使用NSURLSession重構:

  • UIImageView+AFNetworking
  • UIWebView+AFNetworking
  • UIButton+AFNetworking

遷移


AFHTTPRequestOperationManager 核心代碼

如果你以前使用 AFHTTPRequestOperationManager , 你將需要遷移去使用 AFHTTPSessionManager。 以下的類在兩者過渡間並沒有變化:

  • securityPolicy
  • requestSerializer
  • responseSerializer

接下來舉一個關於AFHTTPSessionManager的簡單例子。注意HTTP網絡請求返回的不再是AFHTTPRequestOperation, 修改成為了NSURLSessionTask,並且成功和失敗的Block塊中的參數也變更為了NSURLSessionTask,而不再是AFHTTPRequestOperation。

AFNetworking 2.x
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"請求的url" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"成功"); } failure:^(AFHTTPRequestOperation *operation, NSError*error) { NSLog(@"失敗"); }];
AFNetworking 3.0
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
[session GET:@"請求的url" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"成功"); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"失敗"); }];

AFHTTPRequestOperation 核心代碼

與NSURLConnection對象不同,每個共享應用范圍的設置如會話管理、緩存策略、Cookie存儲以及URL協議等,這些NSURLSession對象都可以單獨進行配置。使用特定的配置來初始化會話,它可以發送任務來獲取數據,並上傳或下載文件。

在AFNetworking 2.0中,使用AFHTTPRequestOperation,有可能創建一個沒有額外開銷的獨立的網絡請求來獲取數據。NSURLSession則需要更多的開銷,為了獲得所要請求的數據。

接下來,將要通過AFHTTPSessionManager創建一個對象,並創建一個任務和啟動它。

AFNetworking 2.x
NSURL *URL = [NSURL URLWithString:@""]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; op.responseSerializer = [AFJSONResponseSerializer serializer]; [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; [[NSOperationQueue mainQueue] addOperation:op];
AFNetworking 3.0
NSURL *URL = [NSURL URLWithString:@""]; AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:URL.absoluteString parameters:nil success:^(NSURLSessionTask *task, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(NSURLSessionTask *operation, NSError *error) { NSLog(@"Error: %@", error); }];

請求頭的設置

   AFHTTPSessionManager  *_sessionManager = [AFHTTPSessionManager manager];

    _sessionManager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];

    _sessionManager.requestSerializer.timeoutInterval = 10;

    _sessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];

    _sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];

    [_sessionManager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];

    [_sessionManager.requestSerializer setValue:[self getHelpToken] forHTTPHeaderField:@"Authorization"];

請求超時和接受類型

manager.requestSerializer.timeoutInterval = 10;
    
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html",@"text/json",@"text/javascript", @"text/plain", nil];

UIKit的遷移

圖片下載已經被重構,以遵循AlamofireImage架構與新的AFImageDownloader類。這個類的圖片下載職責的代理人是UIButton與UIImageView的類目,並且提供了一些方法,在必要時可以自定義。類別中,下載遠程圖片的實際方法沒有改變。

UIWebView的類目被重構為使用AFHTTPSessionManager作為其網絡請求。

UIAlertView的類目被廢棄

從AFNetworking 3.0后UIAlertView的類目因過時而被廢棄。並沒有提供UIAlertController類目的計划,因為這是應用程序應處理的邏輯,而不是這個庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM