AFNetworking 3.0
AFNetworking是一款在OS X和iOS下都令人喜愛的網絡庫璧函。為了迎合iOS新版本的升級, AFNetworking在3.0版本中刪除了基于
NSURLConnectionAPI的所有支持仍翰。如果你的項目以前使用過這些API妥衣,建議您立即升級到基于 NSURLSession 的API的AFNetworking的版本叮趴。本指南將引導您完成這個過程辆沦。
本指南是為了引導使用AFNetworking 2.x升級到最新的版本API贬养,以達到過渡的目的挤土,并且解釋了新增和更改的設計結構。
新設備要求: iOS 7, Mac OS X 10.9, watchOS 2, tvOS 9, & Xcode 7
AFNetworking 3.0正式支持的iOS 7误算, Mac OS X的10.9仰美, watchOS 2 迷殿, tvOS 9 和Xcode 7。如果你想使用AFNetworking在針對較舊版本的SDK項目咖杂,請檢查README的兼容性信息庆寺。
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將繼續(xù)運行踊挠,但將沒有新功能將被添加,并且蘋果已經通知所有基于網絡的功能冲杀,以充分使NSURLSession向前發(fā)展效床。
AFNetworking 2.X將繼續(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對象都可以單獨進行配置。使用特定的配置來初始化會話便贵,它可以發(fā)送任務來獲取數據菠镇,并上傳或下載文件。
在AFNetworking 2.0中承璃,使用AFHTTPRequestOperation利耍,有可能創(chuàng)建一個沒有額外開銷的獨立的網絡請求來獲取數據。NSURLSession則需要更多的開銷,為了獲得所要請求的數據隘梨。
接下來程癌,將要通過AFHTTPSessionManager創(chuàng)建一個對象,并創(chuàng)建一個任務和啟動它轴猎。
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);
}];
UIKit的遷移
圖片下載已經被重構嵌莉,以遵循AlamofireImage架構與新的AFImageDownloader類。這個類的圖片下載職責的代理人是UIButton與UIImageView的類目捻脖,并且提供了一些方法锐峭,在必要時可以自定義。類別中郎仆,下載遠程圖片的實際方法沒有改變只祠。
UIWebView的類目被重構為使用AFHTTPSessionManager作為其網絡請求兜蠕。
UIAlertView的類目被廢棄
從AFNetworking 3.0后UIAlertView的類目因過時而被廢棄扰肌。并沒有提供UIAlertController類目的計劃,因為這是應用程序應處理的邏輯熊杨,而不是這個庫曙旭。
原文鏈接: AFNetworking 3.0
純屬個人翻譯,如有錯誤晶府,還請糾正桂躏。