AFNetworking 3.0遷移指南

AFNetworking 3.0


AFNetworking
AFNetworking

原文鏈接:AFNetworking 3.0 Migration Guide

AFNetworking 3.0AFNetworking最新發(fā)行的版本,一款在 iOS & Mac OS X 下都另開發(fā)者喜愛的網(wǎng)絡(luò)庫导饲。為了這個庫可維持性發(fā)展,3.0 刪除了所有支持現(xiàn)在已廢棄的 NSURLConnection 的API。如果您的工程之前使用過這些 API灰瞻,建議您升級到基于NSURLSession的 API傀履,當(dāng)然這不是必須的抹剩,根據(jù)自己的情況定。本指南將會指導(dǎo)您完成這一過程筐眷。(PS:AFNetworking最新的版本已經(jīng)更新到3.1.0,詳細(xì)文檔見 AFNetworking 3.1.0

新的需求環(huán)境: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
基礎(chǔ)上的资溃,AFNetworking 2.0 開始使用基于 NSURLConnection API基礎(chǔ)功能武翎,或著基于新的NSURLSession API 的功能。AFNetworking 3.0現(xiàn)在是專門建立在 NSURLSession 頂層的溶锭,這降低了維護(hù)負(fù)擔(dān)后频,同時允許支持蘋果為 NSURLSession 提供的任何額外的增強(qiáng)的特性。在Xcode 7暖途,NSURLConnection API 已經(jīng)被蘋果官方棄用卑惜。然而API函數(shù)將繼續(xù)使用不會受影響,只不過再也不會添加新的功能了驻售,蘋果建議所有基于網(wǎng)絡(luò)的功能在未來都能使用 NSURLSession露久。

AFNetworking 2.x 系列將繼續(xù)獲得關(guān)鍵的bug修復(fù)和安全補(bǔ)丁,但是沒有新的功能將被添加進(jìn)去欺栗。Alamofire Software Foundation建議毫痕,所有項(xiàng)目將來都要遷移到基于 NSURLSession API

被移除的類

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

被更換的類

下述基于 NSURLConnection 內(nèi)部實(shí)現(xiàn)的類迟几,使用 NSURLSession 時都被重構(gòu)了:
? UIImageView+AFNetworking
? UIWebView+AFNetworking.h
? UIButton+AFNetworking.h

遷移


AFHTTPRequestOperationManager 基本代碼

AFHTTPRequestOperationManager ->AFHTTPSessionManager消请。
在這些類中有些組件是可重用的,包括:
? securityPolicy
? requestSerializer
? responseSerializer
下述是一個遷移到AFHTTPSessionManager的簡單示例类腮。
注意到 HTTP 返回的是 NSURLSessionTask 而不
AFHTTPRequestOperation臊泰,success and failure blocks 傳的參數(shù)是 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 協(xié)議针饥,而 NSURLSession 對象可以獨(dú)立的配置這些。一旦會話被特定的配置初始化需频,他可以分派任務(wù)來獲取數(shù)據(jù)丁眼,上傳或者下載文件。

AFNetworking 2.0昭殉,影響了AFHTTPRequestOperation苞七,他有可能會創(chuàng)建一個沒有額外開銷的單一請求來獲取遠(yuǎn)程數(shù)據(jù)。NSURLSession 需要稍微多點(diǎn)的開銷挪丢,為了獲得請求本身功能的訪問入口莽鸭。

未來,創(chuàng)建一個單一的請求需要創(chuàng)建一個 AFHTTPSessionManager 吃靠,緊接著要創(chuàng)建一個任務(wù)并開啟這個任務(wù)硫眨。

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 巢块。
如果你有一個應(yīng)用程序礁阁,很大程度上
依賴于AFURLConnectionOperation NSOperation 方面,那么恭喜你中槍了??族奢,你的程序可能會需要額外的重構(gòu)以便用 NSOperation 的基礎(chǔ)方法封裝 AFHTTPSessionManager 姥闭。

跟蹤進(jìn)度條

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

使用 KVO棚品,如果響應(yīng)包含 Content-Length 頭,那么每個任務(wù)的進(jìn)度都可以被跟蹤廊敌。AFNetworking 3.0中關(guān)于 progress 更多變化的額外信息請查看 #3187 铜跑。

UIKit 遷移

圖片下載已經(jīng)被遵循 AlamofireImage 架構(gòu)的
新類 AFImageDownloader 重構(gòu)。UIButton和UIImageView 分類實(shí)現(xiàn)將圖片下載的責(zé)任委托給這個類骡澈,并且暴露一些共享的參數(shù)用來允許自定義下載锅纺,從類接口下載遠(yuǎn)程圖像的實(shí)際方法保持不變。
UIWebView類已經(jīng)被使用一個共享的網(wǎng)絡(luò)請求 AFHTTPSessionManager 重構(gòu)肋殴。

UIAlertView 分類被移除

AFNetworking 3.0 已經(jīng)廢除了UIAlertView分類囤锉,并且未來也沒打算支持UIAlertController。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末护锤,一起剝皮案震驚了整個濱河市官地,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烙懦,老刑警劉巖驱入,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡沧侥,警方通過查閱死者的電腦和手機(jī)可霎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門魄鸦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宴杀,“玉大人,你說我怎么就攤上這事拾因⊥眨” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵绢记,是天一觀的道長扁达。 經(jīng)常有香客問我,道長蠢熄,這世上最難降的妖魔是什么跪解? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮签孔,結(jié)果婚禮上叉讥,老公的妹妹穿的比我還像新娘。我一直安慰自己饥追,他們只是感情好图仓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著但绕,像睡著了一般救崔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捏顺,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天六孵,我揣著相機(jī)與錄音,去河邊找鬼幅骄。 笑死狸臣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的昌执。 我是一名探鬼主播烛亦,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼懂拾!你這毒婦竟也來了煤禽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤岖赋,失蹤者是張志新(化名)和其女友劉穎檬果,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡选脊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年杭抠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恳啥。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡偏灿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钝的,到底是詐尸還是另有隱情翁垂,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布硝桩,位于F島的核電站沿猜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碗脊。R本人自食惡果不足惜啼肩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衙伶。 院中可真熱鬧祈坠,春花似錦、人聲如沸痕支。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卧须。三九已至另绩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間花嘶,已是汗流浹背笋籽。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留椭员,地道東北人车海。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像隘击,于是被迫代替她去往敵國和親侍芝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容