iOS網(wǎng)絡(luò)編程

iOS 系統(tǒng)架構(gòu)

開始介紹iOS網(wǎng)絡(luò)編程之前介紹一下iOS 系統(tǒng)架構(gòu)。
iOS的系統(tǒng)架構(gòu)分為四個層次:核心操作系統(tǒng)層(Core OS layer)、核心服務(wù)層(Core Services layer)、媒體層(Media layer)和可觸摸層(Cocoa Touch layer)。

  • 位于iOS系統(tǒng)架構(gòu)最下面的一層是核心操作系統(tǒng)層(Core OS layer),它包括內(nèi)存管理、文件系統(tǒng)、電源管理以及一些其他的操作系統(tǒng)任務(wù)。它可以直接和硬件設(shè)備進(jìn)行交互。核心操作系統(tǒng)層包括以下這些組件:Accelerate Framework、External Accessory Framework、Security Framework、System等幾個框架,基本都是基于c語言的接口。
  • 第二層是核心服務(wù)層,我們可以通過它來訪問iOS的一些服務(wù)。包含:Address Book Framework、CFNetwork Framework、Core Data Framework、Core Foundation Framework、Core Location Framework、Core Media Framework、Core Telephony Framework、Event Kit Framework、Foundation Framework、Mobile Core Services Framework、Quick Look Framework、Store Kit Framework、System Configuration Framework、Block Objects、Grand Central Dispatch 、In App Purchase、Location Services、SQLite、XML Support等一些框架,也基本都是基于c語言的接口。
  • 第三層是媒體層,通過它我們可以在應(yīng)用程序中使用各種媒體文件,進(jìn)行音頻與視頻的錄制,圖形的繪制,以及制作基礎(chǔ)的動畫效果。它包括以下這些組件:
    Core Audio OpenGL Audio Mixing Audio Recording Video Playback JPG,PNG,TIFF PDF Quartz Core Animation OpenGL ES
  • 第四層是可觸摸層,這一層為我們的應(yīng)用程序開發(fā)提供了各種有用的框架,并且大部分與用戶界面有關(guān),本質(zhì)上來說它負(fù)責(zé)用戶在iOS設(shè)備上的觸摸交互操作。它包括以下這些組件: Multi-Touch Events Core Motion Camera View Hierarchy Localization Alerts Web Views Image Picker Multi-Touch Controls.

** cocoa 很多組件都有兩種實(shí)現(xiàn),一種是基于 C 的以 CF 開頭的類(CF=Core Foundation),這是比較底層的;另一種是基于 Obj-C 的以 NS 開頭的類(NS=Next Step),這種類抽象層次更高,易于使用。**

簡單介紹下 Core Foundation 與 cocoa Foundation 區(qū)別:
** Core Foundation框架 (CoreFoundation.framework) 是一組C語言接口,它們?yōu)閕OS應(yīng)用程序提供基本數(shù)據(jù)管理和服務(wù)功能。位于第二層核心服務(wù)層**
cocoa Foundation框架位于第四層。

iOS 系統(tǒng)網(wǎng)絡(luò)編程

和大多數(shù)組件一樣iOS網(wǎng)絡(luò)編程層次結(jié)構(gòu)也分為三層

  • Cocoa層:NSURL,Bonjour,Game Kit,WebKi。這層是最上層的基于 Objective-C 的 API,比如 URL訪問,NSStream,Bonjour,GameKit等,這是大多數(shù)情況下我們常用的 API。Cocoa 層是基于 Core Foundation 實(shí)現(xiàn)的。(可觸摸層)
  • Core Foundation層:基于C的CFNetwork和CFNetServices。因?yàn)橹苯邮褂?socket 需要更多的編程工作,所以蘋果對 OS 層的 socket 進(jìn)行簡單的封裝以簡化編程任務(wù)。該層提供了 CFNetwork 和 CFNetServices,其中 CFNetwork 又是基于 CFStream 和 CFSocket。(核心服務(wù)層)
  • OS層:基于C的BSD socket。(核心操作系統(tǒng)層)

這里我們主要介紹Core Foundation層中CFStream和位于Cocoa層的NSStream。

NSStream 其實(shí)只是用Objective-C對CFNetwork 的簡單封裝,它使用名為 NSStreamDelegate 的協(xié)議來實(shí)現(xiàn) CFNetwork 中的回調(diào)函數(shù)的作用,同樣,runloop 也與 NSStream 結(jié)合的很好。NSStream 有兩個實(shí)體類:NSInputStreamNSOutputStream,分別對應(yīng) CFNetwork 中的 CFReadStream 和 CFWriteStream。

NSStream,NSInputStream,NSOutputStream. 它們都是與流操作有關(guān)的類。NSStream是抽象類,它定義了流對象的基本接口和屬性。NSInputStream和NSOutputStream是NSStream的子類,它們實(shí)現(xiàn)了輸入流和輸出流的基本操作。

  • 你可以為存儲在內(nèi)存中,向文件或者C buffer寫入流數(shù)據(jù)創(chuàng)建NSOutputStream對象。使用NSOutputStream可以將網(wǎng)絡(luò)請求的資源回來的數(shù)據(jù)保存到本地文件,通過輸出流對象,將數(shù)據(jù)寫入到指定的文件中。。
  • 可以為從NSData對象和文件中讀取的流數(shù)據(jù)創(chuàng)建NSInputStream對象;使用NSInputStream把文件上傳到服務(wù)器。比喻說圖片保存到服務(wù)器。
  • 可以在網(wǎng)絡(luò)套接字的兩端創(chuàng)建NSInputStream和NSOutputStream對象,通過流對象,你可以不用一次性將所有的流數(shù)據(jù)加載到內(nèi)存中。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容