iOS網絡編程模型

  iOS網絡編程層次結構也分爲三層:編程

 

  • 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框架的結構圖:socket

  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,能夠獨立使用,能夠聯合使用。oop

  • 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的服務之間的交互。spa

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/ 。能夠從上面下載到最新源碼,以及獲取到相關的資料。

 

by sschu

相關文章
相關標籤/搜索