iOS網路-05-AFNetwoking原理及常用操作

來源:互聯網
上載者:User

iOS網路-05-AFNetwoking原理及常用操作
AFN的六大模組

NSURLConnection,主要對NSURLConnection進行了進一步的封裝,包含以下核心的類:
AFURLConnectionOperation AFHTTPRequestOperationManager AFHTTPRequestOperation NSURLSession,主要對象NSURLSession對象進行了進一步的封裝,包含以下核心的類:
AFURLSessionManager AFHTTPSessionManager Reachability,提供了與網路狀態相關的操作介面,包含以下核心的類:
AFNetworkReachabilityManager Security,提供了與安全性相關的操作介面,包含以下核心的類:
AFSecurityPolicy Serialization,提供了與解析資料相關的操作介面,包含以下核心的類:
AFURLRequestSerialization AFURLResponseSerialization UIKit,提供了大量網路請求過程中與UI介面顯示相關的操作介面,通常用於網路請求過程中提示,使使用者互動更加友好,包含以下核心的分類/類:
AFNetworkActivityIndicatorManager UIActivityIndicatorView+AFNetworking UIAlertView+AFNetworking UIButton+AFNetworking UIImageView+AFNetworking UIKit+AFNetworking UIProgressView+AFNetworking UIRefreshControl+AFNetworking UIWebView+AFNetworkingAFURLSessionManager

建立任務的方法

普通任務
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler/*** request:請求對象* completionHandler:請求完成調用的Block     * response:伺服器的響應資訊    * responseObject:伺服器返回的資料    * error:錯誤資訊*/
上傳任務( 分別上傳不同類型的檔案)
// 1. 上傳檔案類型的資料- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler/*** fileURL:所要上傳檔案的路徑*/// 2. 上傳NSData類型的資料- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler/*** bodyData:所要上傳的檔案資料*/// 3. 上傳流資料- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler/*** request:通過流資料初始化的請求對象*/
下載任務
// 1. 普通下載任務- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request progress:(NSProgress * __autoreleasing *)progress destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler/*** progress:管理下載進度* destination:儲存資料調用的Block    * targetPath:資料的儲存路徑    * 伺服器的響應資訊*/// 2. 支援斷點下載的下載任務- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData progress:(NSProgress * __autoreleasing *)progress destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler /*** progress:管理下載進度* resumeData:斷點下載時的斷點資訊*/                                   
AFHTTPSessionManager常用的屬性
baseURL(NSURL *),用於監視網路可達性與建立請求對象 requestSerializer(AFHTTPRequestSerializer *),指定指定GET、HEAD與DELETE請求參數的解析格式 responseSerializer(AFHTTPResponseSerializer *),用於指定伺服器返回資料的格式

常用方法

初始化
// 1. 通過Factory 方法建立AFHTTPSessionManager對象+ (instancetype)manager// 2. 通過構造方法建立AFHTTPSessionManager對象- (instancetype)initWithBaseURL:(NSURL *)url/*** 根據url初始化AFHTTPSessionManager對象*/- (instancetype)initWithBaseURL:(NSURL *)url sessionConfiguration:(NSURLSessionConfiguration *)configuration/*** 根據url與configuration初始化AFHTTPSessionManager對象*/
請求資料
// 1. GET請求- (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure/*** URLString:請求路徑* parameters:請求參數* success:請求成功時調用的Block    * responseObject:伺服器返回的資料* failure:請求失敗時調用的Block    * error:錯誤資訊*/// 2. POST請求- (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure/*** 參數含義與GET請求相同*/- (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters constructingBodyWithBlock:(void (^)(id  formData))block success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure/*** block:用於建立多個資料來源*/
使用AFN請求網路資料

請求資料(XML/JSON)

建立AFHTTPSessionManager對象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
指定對伺服器的返回資料格式
//以XML文檔的形式返回資料manager.responseSerializer = [AFXMLParserResponseSerializer serializer];//以JSON形式返回資料manager.responseSerializer = [AFJSONResponseSerializer serializer];
佈建要求體( 類型為XML或JSON)
// 請求體通常由伺服器指定格式    NSDictionary *params = @{                         @username : @帳號,                         @pwd : @密碼,                         @type : @XML/JSON                         };                             
發送請求
[manager GET:@請求路徑 parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {    //responseObject:伺服器返回的資料    NSLog(@請求成功);} failure:^(NSURLSessionDataTask *task, NSError *error) {    //error:錯誤資訊    NSLog(@請求失敗);}];

上傳資料

建立AFHTTPSessionManager對象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
建立上傳任務
/**基於NSURLConnection*/[manager POST:@請求路徑 parameters:@{@使用者名稱 : @密碼 constructingBodyWithBlock:^(id formData) {    //設定需要上傳的檔案    NSData *data = [NSData dataWithContentsOfFile:@所要長傳檔案的路徑];    [formData appendPartWithFileData:data name:@file fileName:@test.png mimeType:@image/png];} success:^(NSURLSessionDataTask *task, id responseObject) {          //上傳成功} failure:^(NSURLSessionDataTask *task, NSError *error) {    //上傳失敗}];/**基於NSURLSession*/[manager uploadTaskWithRequest:request fromData:data progress:progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {    //上傳資料成功}];

下載資料

建立AFHTTPSessionManager對象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
建立下載任務
/**基於NSURLSession*/[manager downloadTaskWithRequest:request progress:progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {    // 儲存下載資料是調用的Block} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {    //下載完成時調用的Block}]

 。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.