AFNetworking 3.0遷移指南

AFNetworking 3.0


AFNetworking
AFNetworking

原文鏈接:AFNetworking 3.0 Migration Guide

AFNetworking 3.0AFNetworking最新發行的版本,一款在 iOS & Mac OS X 下都另開發者喜愛的網絡庫。為了這個庫可維持性發展,3.0 刪除了所有支持現在已廢棄的 NSURLConnection 的API。如果您的工程之前使用過這些 API,建議您升級到基于NSURLSession的 API,當然這不是必須的,根據自己的情況定。本指南將會指導您完成這一過程。(PS:AFNetworking最新的版本已經更新到3.1.0,詳細文檔見 AFNetworking 3.1.0

新的需求環境: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, and Xcode 7。如果你想使用最新的 AFNetworking 庫替換舊版本的庫,請移步 README 查看兼容信息。

NSURLConnection的API已廢棄


AFNetworking 1.0 是建立在 NSURLConnection
基礎上的,AFNetworking 2.0 開始使用基于 NSURLConnection API基礎功能,或著基于新的NSURLSession API 的功能。AFNetworking 3.0現在是專門建立在 NSURLSession 頂層的,這降低了維護負擔,同時允許支持蘋果為 NSURLSession 提供的任何額外的增強的特性。在Xcode 7NSURLConnection API 已經被蘋果官方棄用。然而API函數將繼續使用不會受影響,只不過再也不會添加新的功能了,蘋果建議所有基于網絡的功能在未來都能使用 NSURLSession

AFNetworking 2.x 系列將繼續獲得關鍵的bug修復和安全補丁,但是沒有新的功能將被添加進去。Alamofire Software Foundation建議,所有項目將來都要遷移到基于 NSURLSession API

被移除的類

3.0 被移除的類有:
? AFURLConnectionOperation
? AFHTTPRequestOperation
? AFHTTPRequestOperationManager

被更換的類

下述基于 NSURLConnection 內部實現的類,使用 NSURLSession 時都被重構了:
? UIImageView+AFNetworking
? UIWebView+AFNetworking.h
? UIButton+AFNetworking.h

遷移


AFHTTPRequestOperationManager 基本代碼

AFHTTPRequestOperationManager ->AFHTTPSessionManager
在這些類中有些組件是可重用的,包括:
? securityPolicy
? requestSerializer
? responseSerializer
下述是一個遷移到AFHTTPSessionManager的簡單示例。
注意到 HTTP 返回的是 NSURLSessionTask 而不
AFHTTPRequestOperation,success and failure blocks 傳的參數是 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.x
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { 
         NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
         NSLog(@"Error: %@", error);
}];

AFHTTPRequestOperation 基本代碼

不像 NSURLConnection 對象,這個對象共享了會話管理,緩存策略,cookie存儲和URL 協議,而 NSURLSession 對象可以獨立的配置這些。一旦會話被特定的配置初始化,他可以分派任務來獲取數據,上傳或者下載文件。

AFNetworking 2.0,影響了AFHTTPRequestOperation,他有可能會創建一個沒有額外開銷的單一請求來獲取遠程數據。NSURLSession 需要稍微多點的開銷,為了獲得請求本身功能的訪問入口。

未來,創建一個單一的請求需要創建一個 AFHTTPSessionManager ,緊接著要創建一個任務并開啟這個任務。

AFNetworking 2.x
NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];
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.x
NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:URL.absoluteString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

注意到,NSURLSession 不是建立在 NSOperation
如果你有一個應用程序,很大程度上
依賴于AFURLConnectionOperation NSOperation 方面,那么恭喜你中槍了??,你的程序可能會需要額外的重構以便用 NSOperation 的基礎方法封裝 AFHTTPSessionManager

跟蹤進度條

AFNetworking 3.0 使用 NSProgressNSURLSessionTasks 跟蹤進度。除了基于 AFURLSessionManager 的上傳和下載任務 和 基于 AFHTTPSessionManager 的GET和POST方法的 block 便利方法之外,AFURLSessionManager 也為每個任務暴露了輔助方法以便訪問 NSProgress 對象:
? uploadProgressForTask:
? downloadProgressForTask:

使用 KVO,如果響應包含 Content-Length 頭,那么每個任務的進度都可以被跟蹤。AFNetworking 3.0中關于 progress 更多變化的額外信息請查看 #3187

UIKit 遷移

圖片下載已經被遵循 AlamofireImage 架構的
新類 AFImageDownloader 重構。UIButton和UIImageView 分類實現將圖片下載的責任委托給這個類,并且暴露一些共享的參數用來允許自定義下載,從類接口下載遠程圖像的實際方法保持不變。
UIWebView類已經被使用一個共享的網絡請求 AFHTTPSessionManager 重構。

UIAlertView 分類被移除

AFNetworking 3.0 已經廢除了UIAlertView分類,并且未來也沒打算支持UIAlertController。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容