AFN的使用以及和ASI的區(qū)別

一伙狐、2大管理對象

1.AFHTTPRequestOperationManager

* 對NSURLConnection的封裝

2.AFHTTPSessionManager

* 對NSURLSession的封裝

二系馆、AFHTTPRequestOperationManager的具體使用

1.創(chuàng)建管理者

AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

2.封裝請求參數(shù)

NSMutableDictionary *params = [NSMutableDictionary dictionary];

params[@"username"] = @"哈哈哈";

params[@"pwd"] = @"123";

3.發(fā)送請求

NSString *url = @"http://localhost:8080/MJServer/login";

[mgr POST:url parameters:params

success:^(AFHTTPRequestOperation *operation, id responseObject) {

// 請求成功的時候調(diào)用這個block

NSLog(@"請求成功---%@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

// 請求失敗的時候調(diào)用調(diào)用這個block

NSLog(@"請求失敗");

}];

// GET請求

[mgr GET:url parameters:params

success:^(AFHTTPRequestOperation *operation, id responseObject) {

// 請求成功的時候調(diào)用這個block

NSLog(@"請求成功---%@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

// 請求失敗的時候調(diào)用調(diào)用這個block

NSLog(@"請求失敗");

}];

三、對服務(wù)器返回數(shù)據(jù)的解析

1.AFN可以自動對服務(wù)器返回的數(shù)據(jù)進行解析

* 默認將服務(wù)器返回的數(shù)據(jù)當(dāng)做JSON來解析

2.設(shè)置對服務(wù)器返回數(shù)據(jù)的解析方式

1> 當(dāng)做是JSON來解析(默認做法)

* mgr.responseSerializer = [AFJSONResponseSerializer serializer];

* responseObject的類型是NSDictionary或者NSArray

2> 當(dāng)做是XML來解析

* mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];

* responseObject的類型是NSXMLParser

3> 直接返回data

* 意思是:告訴AFN不要去解析服務(wù)器返回的數(shù)據(jù),保持原來的data即可

* mgr.responseSerializer = [AFHTTPResponseSerializer serializer];

3.注意

* 服務(wù)器返回的數(shù)據(jù)一定要跟responseSerializer對得上

1> 服務(wù)器返回的是JSON數(shù)據(jù)

* AFJSONResponseSerializer

* AFHTTPResponseSerializer

2> 服務(wù)器返回的是XML數(shù)據(jù)

* AFXMLParserResponseSerializer

* AFHTTPResponseSerializer

3> 服務(wù)器返回的是其他數(shù)據(jù)

* AFHTTPResponseSerializer

四.AFN 的使用 ?

重點: 掌握 AFN 發(fā)送網(wǎng)絡(luò)請求的方法.

{

AFN 是最常用的網(wǎng)絡(luò)框架, AFN 內(nèi)部封裝了 NSURLConnection 和 NSURLSession

其中:

AFHTTPRequestOperationManager 是對 NSURLConnection 的封裝;

AFHTTPSessionManager 是對 NSURLSession 的封裝.

AFN 的使用非常簡單:

總共分為兩步: 1. 創(chuàng)建網(wǎng)絡(luò)請求管理者; 2. 封裝請求參數(shù); 3.發(fā)送請求.

// 1. 創(chuàng)建網(wǎng)絡(luò)請求管理者

AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

// 2. 封裝請求參數(shù)

NSMutableDictionary *params = [NSMutableDictionary dictionary];

params[@"username"] = @"zhangsan";

params[@"password"] = @"zhang";

// 3. 發(fā)送網(wǎng)絡(luò)請求 ,AFN 中最常用的兩個請求就是 GET 請求 和 POST 請求

{

// GET請求

[mgr GET:url parameters:params

success:^(AFHTTPRequestOperation *operation, id responseObject) {

// 請求成功的時候調(diào)用這個block

NSLog(@"請求成功---%@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

// 請求失敗的時候調(diào)用調(diào)用這個block

NSLog(@"請求失敗");

}];

// POST請求

[mgr POST:url parameters:params

success:^(AFHTTPRequestOperation *operation, id responseObject) {

// 請求成功的時候調(diào)用這個block

NSLog(@"請求成功---%@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

// 請求失敗的時候調(diào)用調(diào)用這個block

NSLog(@"請求失敗");

}];

}

}

五. AFN 數(shù)據(jù)解析 ?

重點: 針對不同的網(wǎng)絡(luò)請求,設(shè)置不同的數(shù)據(jù)解析器

{

<1> AFN 可以自動對服務(wù)器返回的數(shù)據(jù)進行解析,默認將服務(wù)器返回的數(shù)據(jù)當(dāng)做 JSON 數(shù)據(jù)解析.

必須按照服務(wù)器返回的數(shù)據(jù)格式,選擇不同的解析器.不然,就會報錯,得不到想要的數(shù)據(jù).

{

// 創(chuàng)建網(wǎng)絡(luò)請求管理者

AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

// 1. 默認情況下,網(wǎng)絡(luò)請求的管理者的解析器如下:

// 由于返回的是 JSON 數(shù)據(jù),所以從服務(wù)器返回的數(shù)據(jù):responseObject 的類型是 NSDictionary 或者 NSArray

mgr.responseSerializer = [AFJSONResponseSerializer serializer];

// 2. 如果服務(wù)器返回的是 XML 數(shù)據(jù),那么必須設(shè)置網(wǎng)絡(luò)請求管理者的解析器類型如下:

// 這時,服務(wù)器返回的數(shù)據(jù) responseObject 的數(shù)據(jù)類型是 NSXMLParser

mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];

// 3. 如果服務(wù)器返回的是 data(比如:文件數(shù)據(jù)),這時需要告訴 AFN 不要去解析服務(wù)器返回的數(shù)據(jù),保持原來的 data 數(shù)據(jù)就可以了.

mgr.responseSerializer = [AFHTTPResponseSerializer serializer];

}

<2> 需要特別注意的是,服務(wù)器返回的數(shù)據(jù)一定要跟 responseSerializer 相對應(yīng).對應(yīng)關(guān)系如下:

{

1> 服務(wù)器返回的是JSON數(shù)據(jù)

* AFJSONResponseSerializer

* AFHTTPResponseSerializer

2> 服務(wù)器返回的是XML數(shù)據(jù)

* AFXMLParserResponseSerializer

* AFHTTPResponseSerializer

3> 服務(wù)器返回的是其他數(shù)據(jù)

* AFHTTPResponseSerializer

}

}

六,AFN和ASI的區(qū)別

一、底層實現(xiàn)

1> AFN的底層基于OC的NSURLConnection和NSURLSession

2> ASI的底層基于純C語言的CFNetwork框架

3> ASI的運行性能 高于 AFN

二、對服務(wù)器返回的數(shù)據(jù)處理

1> ASI沒有直接提供對服務(wù)器數(shù)據(jù)處理的方式躁倒,直接返回data\string

2> AFN提供了多種對服務(wù)器數(shù)據(jù)處理的方式

* JSON處理

* XML處理

* 其他處理

三荞怒、監(jiān)聽請求的過程

1> AFN提供了success和failure兩個block來監(jiān)聽請求的過程(只能監(jiān)聽成功和失敗)

* success : 請求成功后調(diào)用

* failure : 請求失敗后調(diào)用

2> ASI提供了3套方案秧秉,每一套方案都能監(jiān)聽請求的完整過程

(監(jiān)聽請求開始褐桌、接收到響應(yīng)頭信息、接受到具體數(shù)據(jù)福贞、接受完畢撩嚼、請求失敗)

* 成為代理挖帘,遵守協(xié)議,實現(xiàn)協(xié)議中的代理方法

* 成為代理恋技,不遵守協(xié)議拇舀,自定義代理方法

* 設(shè)置block

四、在文件下載和文件上傳的使用難易度

1> AFN

* 不容易監(jiān)聽下載進度和上傳進度

* 不容易實現(xiàn)斷點續(xù)傳

* 一般只用來下載不大的文件

2> ASI

* 非常容易實現(xiàn)下載和上傳

* 非常容易監(jiān)聽下載進度和上傳進度

* 非常容易實現(xiàn)斷點續(xù)傳

* 下載或大或小的文件都行

五蜻底、ASI提供了更多的實用功能

1> 控制圈圈要不要在請求過程中轉(zhuǎn)

2> 可以輕松地設(shè)置請求之間的依賴:每一個請求都是一個NSOperation對象

3> 可以統(tǒng)一管理所有請求(還專門提供了一個叫做ASINetworkQueue來管理所有的請求對象)

* 暫停\恢復(fù)\取消所有的請求

* 監(jiān)聽整個隊列中所有請求的下載進度和上傳進度

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骄崩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子薄辅,更是在濱河造成了極大的恐慌要拂,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件站楚,死亡現(xiàn)場離奇詭異脱惰,居然都是意外死亡,警方通過查閱死者的電腦和手機窿春,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門拉一,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旧乞,你說我怎么就攤上這事蔚润。” “怎么了尺栖?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵嫡纠,是天一觀的道長。 經(jīng)常有香客問我延赌,道長除盏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任皮胡,我火速辦了婚禮痴颊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屡贺。我一直安慰自己蠢棱,他們只是感情好锌杀,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泻仙,像睡著了一般糕再。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玉转,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天突想,我揣著相機與錄音,去河邊找鬼究抓。 笑死猾担,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刺下。 我是一名探鬼主播绑嘹,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼橘茉!你這毒婦竟也來了工腋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤畅卓,失蹤者是張志新(化名)和其女友劉穎擅腰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翁潘,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡趁冈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唐础。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箱歧。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖一膨,靈堂內(nèi)的尸體忽然破棺而出呀邢,到底是詐尸還是另有隱情,我是刑警寧澤豹绪,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布价淌,位于F島的核電站,受9級特大地震影響瞒津,放射性物質(zhì)發(fā)生泄漏蝉衣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一巷蚪、第九天 我趴在偏房一處隱蔽的房頂上張望病毡。 院中可真熱鬧,春花似錦屁柏、人聲如沸啦膜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僧家。三九已至雀摘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間八拱,已是汗流浹背阵赠。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肌稻,地道東北人清蚀。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像灯萍,于是被迫代替她去往敵國和親轧铁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

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