iOS網路編程模型

來源:互聯網
上載者:User

標籤:

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網路編程模型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.