天天看點

iOS ASI 筆記

 //聯系人:石虎  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語言的代碼,看看頭檔案,知道接口,能夠畫出大概的功能接口線路圖就行了!