iOS網絡編程層次結構也分爲三層:編程
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
ASIHTTPRequest網站
使用iOS SDK中的HTTP網絡請求API,至關的複雜,調用很繁瑣,ASIHTTPRequest就是一個對CFNetwork API進行了封裝,而且使用起來很是簡單的一套API,用Objective-C編寫,能夠很好的應用在Mac OS X系統和iOS平臺的應用程序中。ASIHTTPRequest適用於基本的HTTP請求,和基於REST的服務之間的交互。spa
ASIHTTPRequest功能很強大,主要特點以下:
官方網站: http://allseeing-i.com/ASIHTTPRequest/ 。能夠從上面下載到最新源碼,以及獲取到相關的資料。
by sschu