http://www.jianshu.com/p/047463a7ce9b?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-timeline&from=timeline&isappinstalled=1ios
AFNetworking是一款在OS X和iOS下都使人喜好的網絡庫。爲了迎合iOS新版本的升級, AFNetworking在3.0版本中刪除了基於
NSURLConnectionAPI的全部支持。若是你的項目之前使用過這些API,建議您當即升級到基於 NSURLSession 的API的AFNetworking的版本。本指南將引導您完成這個過程。git
本指南是爲了引導使用AFNetworking 2.x升級到最新的版本API,以達到過渡的目的,而且解釋了新增和更改的設計結構。github
AFNetworking 3.0正式支持的iOS 7, Mac OS X的10.9, watchOS 2 , tvOS 9 和Xcode 7。若是你想使用AFNetworking在針對較舊版本的SDK項目,請檢查README的兼容性信息。xcode
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中廢棄:網絡
下面的類包含基於NSURLConnection的API的內部實現。他們已經被使用NSURLSession重構:session
若是你之前使用 AFHTTPRequestOperationManager , 你將須要遷移去使用 AFHTTPSessionManager。 如下的類在二者過渡間並無變化:架構
接下來舉一個關於AFHTTPSessionManager的簡單例子。注意HTTP網絡請求返回的再也不是AFHTTPRequestOperation, 修改爲爲了NSURLSessionTask,而且成功和失敗的Block塊中的參數也變動爲了NSURLSessionTask,而再也不是AFHTTPRequestOperation。app
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"請求的url" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"成功"); } failure:^(AFHTTPRequestOperation *operation, NSError*error) { NSLog(@"失敗"); }];
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
[session GET:@"請求的url" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"成功"); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"失敗"); }];
與NSURLConnection對象不一樣,每一個共享應用範圍的設置如會話管理、緩存策略、Cookie存儲以及URL協議等,這些NSURLSession對象均可以單獨進行配置。使用特定的配置來初始化會話,它能夠發送任務來獲取數據,並上傳或下載文件。
在AFNetworking 2.0中,使用AFHTTPRequestOperation,有可能建立一個沒有額外開銷的獨立的網絡請求來獲取數據。NSURLSession則須要更多的開銷,爲了得到所要請求的數據。
接下來,將要經過AFHTTPSessionManager建立一個單例,並建立一個任務和啓動它。
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];
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); }];
圖片下載已經被重構,以遵循AlamofireImage架構與新的AFImageDownloader類。這個類的圖片下載職責的代理人是 UIButton與UIImageView的類目,而且提供了一些方法,在必要時能夠自定義。類別中,下載遠程圖片的實際方法沒有改變。
UIWebView的類目被重構爲使用AFHTTPSessionManager做爲其網絡請求。
從AFNetworking 3.0後UIAlertView的類目因過期而被廢棄。並無提供UIAlertController類目的計劃,由於這是應用程序應處理的邏輯,而不是這個庫。
原文連接: AFNetworking 3.0純屬我的翻譯,若有錯誤,還請糾正。