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è)備進行交互。核心操作系統(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)用程序中使用各種媒體文件桑寨,進行音頻與視頻的錄制,圖形的繪制忿檩,以及制作基礎(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ì)上來說它負責用戶在iOS設(shè)備上的觸摸交互操作肢藐。它包括以下這些組件: Multi-Touch Events Core Motion Camera View Hierarchy Localization Alerts Web Views Image Picker Multi-Touch Controls.
** cocoa 很多組件都有兩種實現(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 實現(xiàn)的帝璧。(可觸摸層)
- Core Foundation層:基于C的CFNetwork和CFNetServices先誉。因為直接使用 socket 需要更多的編程工作,所以蘋果對 OS 層的 socket 進行簡單的封裝以簡化編程任務(wù)的烁。該層提供了 CFNetwork 和 CFNetServices褐耳,其中 CFNetwork 又是基于 CFStream 和 CFSocket。(核心服務(wù)層)
- OS層:基于C的BSD socket渴庆。(核心操作系統(tǒng)層)
這里我們主要介紹Core Foundation層中CFStream和位于Cocoa層的NSStream铃芦。
NSStream 其實只是用Objective-C對CFNetwork 的簡單封裝,它使用名為 NSStreamDelegate 的協(xié)議來實現(xiàn) CFNetwork 中的回調(diào)函數(shù)的作用,同樣,runloop 也與 NSStream 結(jié)合的很好襟雷。NSStream 有兩個實體類:NSInputStream 和 NSOutputStream刃滓,分別對應(yīng) CFNetwork 中的 CFReadStream 和 CFWriteStream。
NSStream耸弄,NSInputStream咧虎,NSOutputStream. 它們都是與流操作有關(guān)的類。NSStream是抽象類计呈,它定義了流對象的基本接口和屬性砰诵。NSInputStream和NSOutputStream是NSStream的子類征唬,它們實現(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)存中。