標籤:
http://www.cnblogs.com/ydhliphonedev/p/3240772.html
- Cocoa層:NSURL,Bonjour,Game Kit,WebKit
- Core Foundation層:基於 C 的 CFNetwork 和 CFNetServices
- OS層:基於 C 的 BSD socket
Cocoa層:是最上層的基於 Objective-C 的 API,比如 URL訪問,NSStream,Bonjour,GameKit等,這是大多數情況下我們常用的 API。Cocoa 層是基於 Core Foundation 實現的。
Core Foundation層:因為直接使用 socket 需要更多的編程工作,所以蘋果對 OS 層的 socket 進行簡單的封裝以簡化編程任務。該層提供了 CFNetwork 和 CFNetServices,其中 CFNetwork 又是基於 CFStream 和 CFSocket。
OS層:最底層的 BSD socket 提供了對網路編程最大程度的控制,但是編程工作也是最多的。因此,蘋果建議我們使用 Core Foundation 及以上層的 API 進行編程。
CFNetwork
CFNetwork位於底層,但高效地處理協議棧的操作。BSD通訊端提供了一些標準對象來方便操作,如與FTP和HTTP伺服器通訊,解析DNS主機地址。而CFNetwork就是以BSD通訊端為基礎。類似,一些cocoa類,如NSURL,使用標準網路通訊協定與伺服器通訊,就是以CFNetwork為基礎。除此之外,WebKit是一些cocoa類,顯示視窗中的網路內容。而NSURL和WebKit都是高層之上,要自行處理網路通訊協定。
是CFNetwork架構與Core Foundation架構的結構圖:
CFSocket API和CFStream API是CFNetwork的基礎。通訊端是網路通訊的基礎,通訊端可以串連到網路或是本地的另一個通訊端,並允許資料傳送。最通常的通訊端抽象就是BSD Socket。CFSocket又是BSD Socket的抽象。CFSocket幾乎包含BSD Socket的所有功能,而且將Socket融入run-loop中。CFSocket可以處理任何socket,甚至stream-based socket。
CFStream API提供了輕鬆的與裝置無關的讀寫資料的能力。你可以為記憶體,檔案,網路(使用通訊端)的資料建立stream,可以使用stream而不必立即把所有資料都寫入到記憶體中。
stream,流,是一個在搭建的通訊通道裡連續傳送的位元組序列。steam是單向的,所有有必要建立input(read) stream和output(write) stream。除了基於檔案的stream,否則,stream中的資料一經取出消耗,就無法找到。
CFStream就是對這些stream的抽象,並提供兩種CFType類型:CFReadStream 和 CFWriteStream,他們都符合Core Foundation API的規範。
由圖可以看出,CFStream是基於CFSocket,而且CFStream是CFFTP和CFHTTP的基礎。而CFStream卻不是CFNetwork的一部分,而是Core Foundation的一部分。
CFNetwork API可以拆成許多獨立的API,可以獨立使用,可以聯合使用。
- CFFTP API
- CFHTTP API
- CFHTTPAuthentication API
- CFHost API
- CFNetServices API
- CFNetDiagnostics API
ASIHTTPRequest
使用iOS SDK中的HTTP網路請求API,相當的複雜,調用很繁瑣,ASIHTTPRequest就是一個對CFNetwork API進行了封裝,並且使用起來非常簡單的一套API,用Objective-C編寫,可以很好的應用在Mac OS X系統和iOS平台的應用程式中。ASIHTTPRequest適用於基本的HTTP請求,和基於REST的服務之間的互動。
ASIHTTPRequest功能很強大,主要特色如下:
- l 通過簡單的介面,即可完成向服務端提交資料和從服務端擷取資料的工作
- l 下載的資料,可儲存到記憶體中或直接儲存到磁碟中
- l 能上傳本地檔案到服務端
- l 可以方便的訪問和操作請求和返回的Http頭資訊
- l 可以擷取到上傳或下載的進度資訊,為應用程式提供更好的體驗
- l 支援上傳或下載隊列,並且可擷取隊列的進度資訊
- l 支援基本、摘要和NTLM身份認證,在同一會話中授權憑證會自動維持,並且可以儲存在Keychain(Mac和iOS作業系統的密碼管理系統)中
- l 支援Cookie
- l 當應用(iOS 4+)在後台運行時,請求可以繼續運行
- l 支援GZIP壓縮資料
- l 內建的ASIDownloadCache類,可以緩衝請求返回的資料,這樣即使沒有網路也可以返回已經緩衝的資料結果
- l ASIWebPageRequest –可以下載完整的網頁,包括包含的網頁、樣式表、指令碼等資源檔,並顯示在UIWebView /WebView中。任意大小的頁面都可以無限期緩衝,這樣即使沒有網路也可以離線瀏覽
- l 支援用戶端認證
- l 支援通過代理髮起Http請求
- l 支援頻寬節流設定。在iOS平台,可以根據當前網路情況來自動決定是否限制頻寬,例如當使用WWAN(GPRS/Edge/3G)網路時限制,而當使用WIFI時不做任何限制
- l 支援斷點續傳
- l 支援同步和非同步請求
官方網站: http://allseeing-i.com/ASIHTTPRequest/ 。可以從上面下載到最新源碼,以及擷取到相關的資料。
iOS網路編程模型