iOS ASI和AFN有什么區(qū)別

//聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄

ASI和AFN有什么區(qū)別

1.性能(重點)

* ASI基于底層的CFNetwork框架

* AFN基于NSURLConnection

* 運行性能: ASI > AFN

2.處理服務(wù)器數(shù)據(jù)

1> AFN : 根據(jù)服務(wù)器返回數(shù)據(jù)的數(shù)據(jù), 進行自動解析

* 服務(wù)器返回的是JSON數(shù)據(jù), 自動轉(zhuǎn)換為NSDictionary或者NSArray

* 服務(wù)器返回的是XML數(shù)據(jù), 自動轉(zhuǎn)換為NSXMLParser

2> ASI : 并沒有對服務(wù)器的數(shù)據(jù)進行解析, 直接返回NSData二進制數(shù)據(jù)

3.處理請求的過程

1> AFN : success和failure兩個block

2> ASI : 有3種方式處理請求過程(代理方法\SEL\block)

3.ASI的特色(重點)

1> 緩存

2> 下載和上傳

* 輕松監(jiān)聽請求進度

* 輕松實現(xiàn)斷點下載(ASI沒有斷點上傳功能, 斷點上傳得使用socket技術(shù))

3> 提供了很多擴展接口(比如做數(shù)據(jù)壓縮)

* ASIDataCompressor.h

* ASIDataDecompressor.h

4> ASIHttpRequest繼承自NSOperation

* 能用隊列統(tǒng)一管理所有請求

* 請求之間能依賴

5> ASINetworkQueue

* 統(tǒng)一管理所有請求

* 5個下載\上傳請求 --> ASINetworkQueue : 監(jiān)聽5個請求的總進度

* 監(jiān)聽所有請求的開始\失敗\完畢

* shouldCancelAllRequestsOnFailure

YES : 隊列中某個請求失敗了, 其他所有請求都取消

NO : 隊列中的某個請求失敗了, 其他請求不受影響, 繼續(xù)請求

4.AFN的特色

1> 使用簡單

2> 自帶了網(wǎng)絡(luò)監(jiān)控功能

ASI和AFN以及底層框架的關(guān)系

對比ASIAFN

更新狀態(tài)2012年10月份,已經(jīng)停止更新持續(xù)更新中,目前已更新至2.0版

介紹ASI的直接操作對象ASIHTTPRequest,是一個實現(xiàn)了了NSCopying協(xié)議的NSOperation子類。

在initialize和initWithURL:方法中初始化相關(guān)屬性并配置一系列請求相關(guān)參數(shù)默認值。此外,ASIHTTPRequest還提供了一系列的實例方法用來配置請求對象。AFN的直接操作對象AFHTTPClient,是一個實現(xiàn)了NSCoding和NSCopying協(xié)議的NSObject子類。AFHTTPClient是一個封裝了一系列操作方法的“工具類”,處理請求的操作類是一系列單獨的,基于NSOperation封裝的,AFURLConnectionOperation的子類。

線程處理模式每一個請求都由構(gòu)造方法初始化一個(共享)實例,通過這個實例配置參數(shù)并發(fā)起請求。ASI最初使用delegate模式回調(diào),在iOSSDK支持Block之后也提供了注冊Block的實例方法。

ASI采取的是CFHTTP請求完成,直接回調(diào)ASIHTTPRequest的實例方法,通過儲存的實例對象記錄的信息完成Delegate模式或Block模式的回調(diào)。

在異步請求的處理上,ASIHTTPRequest對象初始化結(jié)束后,在startAsynchronous方法中把對象加入共享操作隊列。此后,包括創(chuàng)建CFHTTPMessageRef,也就是處理網(wǎng)絡(luò)請求的主要對象(事實上是一個指向__CFHTTPMessage結(jié)構(gòu)的指針),在內(nèi)的所有操作都在ASIHTTPRequest對象所屬的子線程中完成。AFN的示例代碼中通過一個靜態(tài)方法,使用dispatch_once()的方式創(chuàng)建AFHTTPClient的共享實例,這也是官方建議的使用方法。在創(chuàng)建AFHTTPClient的初始化方法中,創(chuàng)建了OperationQueue并設(shè)置一系列參數(shù)默認值。在getPath:parameters:success:failure方法中創(chuàng)建NSURLRequest,以NSURLRequest對象實例作為參數(shù),創(chuàng)建一個NSOperation,并加入在初始化發(fā)方中創(chuàng)建的NSOperationQueue。

以上操作都是在主線程中完成的。在NSOperation的start方法中,以此前創(chuàng)建的NSURLRequest對象為參數(shù)創(chuàng)建NSURLConnection并開啟連結(jié)。

數(shù)據(jù)處理模式ASI在這方面顯得更原始,沒有針對任何數(shù)據(jù)類型做特別封裝,只是預留了各種接口和工具供開發(fā)者自行擴展。AFN針對JSON、XML、PList和Image四種數(shù)據(jù)結(jié)構(gòu)封裝了各自處理器,開發(fā)者可以把處理器注冊到操作隊列中,直接在回調(diào)方法中獲得格式化以后的數(shù)據(jù)。

同步請求ASI則是直接通過調(diào)用一個startSynchronous方法。

AFN默認沒有封裝同步請求,如果開發(fā)者需要使用同步請求,則需要重寫getPath:parameters:success:failure方法,對AFHTTPRequestOperation進行同步處理

異步回調(diào)的處理【使用AFNetworking進行網(wǎng)絡(luò)異步請求時,block:(void(^)代碼塊實際返回到UI主線程中。即使在子線程中使用AFNetWorking進行網(wǎng)絡(luò)的異步請求,block:(void(^)代碼塊仍然返回到UI主線程中(AF框架,它里面已經(jīng)create了異步線程)。因此無論當前處在主線程還是子線程,異步返回均返回到UI主線程中?!繛橐幌盗邢嚓P(guān)的請求定義一個HTTPClient,共用一個BaseURL。每次請求把URL中除BaseURL的Path部分做為參數(shù)傳給HTTPClient的靜態(tài)方法,并注冊一個Block用于回調(diào)。

AFN則直接使用了NSOperation的completionBlock屬性。

基于的底層開發(fā)框架

CFNetwork框架

使用CFnetwork而不是Cocoa框架NSURL有幾點好處。CFNetwork更加專注于網(wǎng)絡(luò)協(xié)議,而NSURL更加專注于數(shù)據(jù)訪問,比如通過HTTP或者FTP傳輸數(shù)據(jù)。盡管NSURL的確也提供了一些可配置功能,可是CFNetwork提供的要多的多。另外NSURL還需要你使用Objective_c。如果做不到這點的話,還是應該使用CFNetworkNSURL

【使用iOS5.0 SDK NSURLConnection:

1、進行網(wǎng)絡(luò)同步請求(sendSynchronousRequest)時,調(diào)用該請求接口的操作在哪個線程,同步返回的網(wǎng)絡(luò)結(jié)果就處于哪個線程,因此通常進行網(wǎng)絡(luò)同步請求時,為了避免阻塞UI主線程,需要在子線程中進行網(wǎng)絡(luò)請求;

2、進行網(wǎng)絡(luò)異步請求(sendAsynchronousRequest)時,block:(void(^)代碼塊實際返回到子線程中。因此,此時如需要向UI線程發(fā)送通知,則需要跳轉(zhuǎn)到主線程中發(fā)送通知dispatch_async(dispatch_get_main_queue(),^{});】

底層開發(fā)礦建介紹CFNetwork是基于CoreFoundation中CFStream的一個底層高性能網(wǎng)絡(luò)框架,它由提供基礎(chǔ)服務(wù)的CFSocketStream,支持HTTP協(xié)議的CFHTTP,基于CFHTTP用于身份認證的CFHTTPAuthentication和支持FTP協(xié)議的CFFTP組成。

Core Foundation框架中的CFSocket就是基于BSDSocket開發(fā)的。它幾乎涵蓋了BSD Socket的全部功能,更重要的是把Socket整合到事件的處理循環(huán)中。CoreFounda-tion中較高層的CFStream是基于CFSocket開發(fā)的讀寫流支持。如圖所示,ASI是基于CFHTTP開發(fā)的一個組件;而AFN的基礎(chǔ)——NSURL,也是基于CFNetwork開發(fā)的,也就是說ASI相比AFN更加底層。

性能對比AFN請求優(yōu)于ASI

總結(jié)ASI更適合已經(jīng)發(fā)展了一段時間的應用,或者開發(fā)資源相對豐富的團隊,因為往往這些團隊(或他們的應用)已經(jīng)積累了一定的經(jīng)驗,無論是產(chǎn)品上還是技術(shù)上的。需求復雜度就是在這種時候高起來,而且底層訂制的需求也越來越多,此時AFN就很難滿足需求,需要犧牲一定的易用性,使用ASI作為網(wǎng)絡(luò)底層控件。AFN適合邏輯簡單的應用,或者更適合開發(fā)資源尚不豐富的團隊,因為AFN的易用性要比ASI好很多,而這樣的應用(或團隊)對底層網(wǎng)絡(luò)控件的定制化要求也非常低。

謝謝!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

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

  • AFHTTPRequestOperationManager 網(wǎng)絡(luò)傳輸協(xié)議UDP、TCP、Http、Socket、X...
    Carden閱讀 4,366評論 0 12
  • AFN什么是AFN全稱是AFNetworking,是對NSURLConnection、NSURLSession的一...
    醉葉惜秋閱讀 1,218評論 0 0
  • 13.服務(wù)器圖片改了,url沒有變,需求,服務(wù)器的圖片變了,就從服務(wù)器加載圖片,如果服務(wù)器的沒變,就從本地加載 1...
    AlanGe閱讀 1,182評論 0 1
  • ASI和AFN有什么區(qū)別 1.性能(重點) ASI基于底層的CFNetwork框架 AFN基于NSURLConne...
    對酒當歌_人生幾何閱讀 984評論 0 0
  • 訪問網(wǎng)絡(luò)的基本流程:5點 HTTP協(xié)議 2.通信過程 --------------請求的方法-----get 和 ...
    光明程輝閱讀 1,003評論 0 2