iOS開發之AFNetworking

來源:互聯網
上載者:User

標籤:

1、概述

AFNetworking簡稱AFN,是iOS開發中主流第三方架構之一。蘋果的一套架構NSContention發送請求與接收請求的方式十分繁瑣。操作起來很不方便。不僅要做區分各種請求設定各種不同的參數,而且還要經常在多線程裡操作,同時還要對請求與返回的資料做各種序列化的操作,同時還要考慮請求資料的安全等一堆問題。而AFNetworking幫我們簡化了網路操作。

2、早前的幾個網路架構

1、ASI架構: HTTP終結者.很牛, 但是有BUG, 已經停止更新.

2、MKNetworkKit (印度人寫的).

3、AFN一直還在更新.


AFNetworking的出現:MAC/iOS設計的一套網路架構.(為了簡化網路操作)

地址:https://github.com/AFNetworking/AFNetworking

*AFN專註與網路資料轉送,以及網路中多線程的處理.


3、AFNetworking的使用

1、AFN特性 :

登入傳參數時,傳遞字典即可.(鍵名為參數名,索引值為參數值).

自動到子線程中執行,執行完後返回主線程.

返回的結果自動序列化為NSDictionary.


2、使用AFN注意 :

AFHTTPRequestOperationManager封裝了通過HTTP協議與Web應用程式進行通訊的常用方法.(這個執行個體化的時候不是單例, 因為沒有shared字)

包括建立請求/響應序列化/網路監控/資料安全.

方法等都是以AF開頭的.


3、AFN能做的 (網路中的都涵蓋了):

GET/POST/PUT/DELETE/HEAD請求.

JSON資料解析/Plist資料解析.(不支援XML資料解析)

POSTJSON.

上傳/下載.


4、使用步驟 : 

(1)首先需要執行個體化一個要求管理器AFHTTPRequestOperationManager.

(2)佈建要求的資料格式:預設是二進位.(不是可改)

AFHTTPRequestSerializer(二進位)

AFJSONRequestSerializer(JSON)

AFPropertyListRequestSerializer(Plist)

(3)設定響應的資料格式:預設是JSON.(不是可改)

AFHTTPResponseSerializer(二進位)

AFJSONResponseSerializer(JSON)

AFPropertyListResponseSerializer(Plist)

AFXMLParserResponseSerializer(XML)

AFImageResponseSerializer(Image)

AFCompoundResponseSerializer(組合的)

(4)如果響應者的MIMEType不正確,就要修改acceptableContentTypes.

(5)調用方法,發送響應的請求(GET/POST...).


關於修改AFN源碼:通常序列化時做對text/plan等的支援時,可以一勞永逸的修改原始碼,在acceptableContentTypes中修改即可。

AFN進行GET、POST登入:

#pragma mark - get/post登入- (void)getLogin {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.設定登入參數NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };//3.請求[manager GET:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {    NSLog(@"GET --> %@, %@", responseObject, [NSThread currentThread]); //自動返回主線程} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {    NSLog(@"%@", error);}];}/** *  和上面的GET用法完全一樣, 只有一個POST參數不一樣 */- (void)postLogin {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.設定登入參數NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };//3.請求[manager POST:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {    NSLog(@"POST --> %@, %@", responseObject, [NSThread currentThread]); //自動返回主線程} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {    NSLog(@"%@", error);}];}

AFN進行網路資料解析,擷取Plist,JSON,XML(AFN不支援自動解析XML,有專門的架構去做,如SAX,PULL,KissXML等):

#pragma mark - get 資料解析- (void)getJSON {//1.要求管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.發起請求[manager GET:@"http://localhost/videos.json" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {    NSLog(@"%@", responseObject);} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {    NSLog(@"%@", error);}];}/** *  不支援XML資料解析 */- (void)getXML {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.設定返回資料類型manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //先執行個體化一下//3.發起請求[manager GET:@"http://localhost/videos.xml" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {    NSLog(@"%@", responseObject);} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {    NSLog(@"%@", error);}];}- (void)getPlist {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.設定response類型manager.responseSerializer = [AFPropertyListResponseSerializer serializer]; //是Response, 別寫成request了. 修改為plist類型.manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; //這個可以直接往架構裡面修改.//3.請求[manager GET:@"http://localhost/videos.plist" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {    NSLog(@"%@", responseObject);} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {    NSLog(@"%@", error);}];}

用AFN來POST JSON資料,上傳、下載等:

#pragma mark - post json資料與上傳檔案等- (void)postJSON {//1.管理器AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];//2.設定類型. (這裡要設定request-response的類型)manager.requestSerializer = [AFJSONRequestSerializer serializer];manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //這個決定了下面responseObject返回的類型//    manager.responseSerializer = [AFJSONResponseSerializer serializer];//manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];        //2.設定登入參數NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };//3.發送請求[manager POST:@"http://localhost/postjson.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {//    NSLog(@"postjson--> %@", responseObject);  //這樣顯示JSON的話需要設定text/plain        NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];        NSLog(@"%@",result);} failure: ^(AFHTTPRequestOperation *operation, NSError *error) {    NSLog(@"%@", error);}];}


iOS開發之AFNetworking

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.