//聯系人:石虎 QQ: 1224614774昵稱:嗡嘛呢叭咪哄
ASI -“HTTP通路終結者”2012年11月停止更新
與 AFN的對比
-AFN
1.基于 NSURLConnection & NSURLSession進行的封裝
2.使用簡單
3.提供了自動的序列化 &反序列化支援!
-ASI
1.基于 CFNetwork進行的封裝 Core Foundation,是底層的 C語言的架構,ASI的效率是跟好的
2.使用非常靈活,給程式員提供了各種使用的可能和空間!
* 用代理
*用塊代碼
*自定義監聽方法
*自定義代理->開發者可以定制專屬自己的網絡管理工具!
提示:真正開發中,隻要選擇一個我們比較能夠掌握的就可以了!
3.使用難度大
4. MRC的,需要考慮到 ARC & MRC混編的問題
5.傳回内容隻是提供了二進制資料,或者字元串(前提結果确實是字元串!)
ASI的序列化和反序列化需要程式員自己來!
-其他
是否會使用 ASI,說明你是否是一個資深的 iOS 程式員
目前仍然後很多大的項目,在使用 ASI,原因:
1>大的項目開發時間比較長,不好更換
2>大的項目對網絡請求的複雜度要求比較高!AFN無法勝任!
閱讀官方示例程式筆記
#import "ASIHTTPRequest.h"
1. url
NSURL *url = [NSURL URLWithString:[urlField text]];
2. request
[self setRequest:[ASIHTTPRequest requestWithURL:url]];
3.發起同步請求
[request startSynchronous];
// 異步請求
[request startAsynchronous];
4.能夠獲得資料了!
獲得一個資訊:ASI中,絕大多數的功能都封裝在 ASI的請求中!
ASI block使用的細節:
*** 如果同時設定了代理和塊代碼,兩個方法都會被執行,而且先執行代理的方法,後執行block的方法!
*** 在使用 block時,如果設計到引用 request,需要注意不要出現循環引用!
__weak typeof(request) weakRequest = request;
[request setCompletionBlock:^{
NSLog(@"block - %@", weakRequest.responseString);
}];
block 是 iOS4.0之後,蘋果推出的,ASI預設的裝置版本是3.1.3,支援2.0。
ASI最開始是沒有block的,在1.8版本之後,才增加了block的功能!
面試題:在使用block的時候,什麼時候會出現循環引用,如何解決?
在使用 ASI的時候,如果沒有特殊情況,使用代理會更安全!
*** ASI 使用的一個很重要的注意事項
視圖控制器銷毀之前,需要清理 request的代理并且取消請求,否則會造成野指針通路
// 取消下載下傳任務
[self.request clearDelegatesAndCancel];
關于第三方架構源代碼的閱讀:
1. OC的代碼可以使勁看
2. C語言的代碼,看看頭檔案,知道接口,能夠畫出大概的功能接口線路圖就行了!