1. 程式人生 > >Mac OS 和 iOS 作業系統架構

Mac OS 和 iOS 作業系統架構

        做iOS開發已經半年多了,但是感覺對iOS開發的理解卻還只停留在表面,昨天剛把兩個專案結了,今天打算學了一下iOS系統的架構,以便於更好的理解和開發。

首先看一下Mac OS 和 iOS 系統架構的對比圖:

從圖上可以看出Mac OS和iOS的系統架構層次只有最上面一層不同,Mac是Cocoa框架,而iOS是Cocoa Touch框架,因此Mac OS開發和iOS開發是相似的。這裡我只分析iOS的系統架構:

一、核心作業系統層(Core OS layer):

     Core OS是用FreeBSD和Mach所改寫的Darwin, 是開源、符合POSIX標準的一個Unix核心。這一層包含或者說是提供了整個iPhone OS的一些基礎功能,比如:硬體驅動, 記憶體管理,程式管理,執行緒管理(POSIX),檔案系統,網路(BSD Socket),以及標準輸入輸出等等,所有這些功能都會通過C語言的API來提供。另外,值得一題的是,這一層最具有UNIX色彩,如果你需要把 UNIX上所開發的程式移植到iPhone上,多半都會使用到Core OS的API.


  核心OS層的驅動也提供了硬體和系統框架之間的介面。然而,由於安全的考慮,只有有限的系統框架類能訪問核心和驅動。
  iPhone OS提供了許多訪問作業系統低層功能的介面集,iPhone 應用通過LibSystem庫來訪問這些功能,這些介面集如下所示:

 執行緒(POSIX執行緒);

        網路(BSD sockets);

        檔案系統訪問;

        標準I/O;

        Bonjour和DNS服務;

        現場資訊(Locale Information);

        記憶體分配;

        數學計算。

  許多Core OS技術的標頭檔案位於目錄<iPhoneSDK>/usr/include/,iPhoneSDK是SDK的安裝目錄。

二、核心服務層(Core Services layer):

    Core Services在Core OS基礎上提供了更為豐富的功能, 它包含了Foundation.Framework和Core Foundation.Framework, 之所以叫Foundation ,就是因為它提供了一系列處理字串,排列,組合,日曆,時間等等的基本功能。Foundation是屬於Objective-C的API,Core Fundation是屬於C的API。另外Core servieces還提供了其他的功能,比如:
 Security, Core Location, SQLite, 和Address Book. 其中Security是用來處理認證,密碼管理,按安全性管理的; Core Location是用來處理GPS定位的;SQLLite是輕量級的資料庫,而AddressBook則用來處理電話薄資料的。下面是具體介紹: 

(1)電話本
 電話本框架(AddressBook.framework)提供了儲存在手機裝置中的電話本程式設計介面。開發者能使用該框架訪問和修改儲存在使用者聯絡 人資料庫裡的記錄。例如,一個聊天程式可以使用該框架獲得可能的聯絡人列表,啟動聊天的程序(Process),並在檢視上顯示這些聯絡人資訊等。

    (2)核心基礎框架

        核心基礎框架(CoreFoundation.framework)是基於C語言的介面集,提供iPhone應用的基本資料管理和服務功能。該框架 支援如下功能:

        Collection資料型別(Arrays、 Sets等);

        Bundles;

        字串管理;

        日期和時間管理;

        原始資料塊管理;

        首選項管理;

        URL和Stream操作;

        執行緒和執行迴圈(Run Loops);

        埠和Socket通訊。

          核心基礎框架與基礎框架是緊密相關的,它們為相同的基本功能提供了Objective-C介面。如果開發者混合使用Foundation Objects 和Core Foundation型別,就能充分利用存在兩個框架中的"toll-free bridging"。toll-free bridging意味著開發者能使用這兩個框架中的任何一個的核心基礎和基礎型別,例如Collection和字串型別等。每個框架中的類和資料型別的 描述註明該物件是否支援toll-free bridged。如果是,它與哪個物件橋接(toll-free bridged)。

    (3)CFNetwork

           CFNetwork框架(CFNetwork.framework)是一組高效能的C語言介面集,提供網路協議的面向物件的抽象。開發者可以使用 CFNetwork框架操作協議棧,並且可以訪問低層的結構如BSD Sockets等。同時,開發者也能簡化與FTP和HTTP伺服器的通訊,或解析DNS等任務。使用CFNetwork框架實現的任務如下所示:

          BSD Sockets;

          利用SSL或TLS建立加密連線;

          解析DNS Hosts;

          解析HTTP協議,鑑別HTTP和HTTPS伺服器;

          在FTP伺服器工作;

          釋出、解析和瀏覽Bonjour服務。

    (4)核心位置框架(Core Location Framework)

              核心位置框架(CoreLocation.framework)主要獲得手機裝置當前的經緯度,核心位置框架利用附近的GPS、蜂窩基站或Wi- Fi訊號資訊測量使用者的當前位置。iPhone地圖應用使用這個功能在地圖上顯示使用者的當前位置。開發者能融合這個技術到自己的應用中,給使用者提供一些位 置資訊服務。例如可以提供一個服務:基於使用者的當前位置,查詢附近的餐館、商店或裝置等。

    (5)安全框架(Security Framework)

             iPhone OS除了內建的安全特性外,還提供了外部安全框架(Security.framework),從而確保應用資料的安全性。該框架提供了管理證書、公鑰/私 鑰對和信任策略等的介面。它支援產生加密安全的偽隨機數,也支援儲存在金鑰鏈的證書和金鑰。對於使用者敏感的資料,它是安全的知識庫(Secure Repository)。CommonCrypto介面也支援對稱加密、HMAC和資料摘要。在iPhone OS裡沒有OpenSSL庫,但是資料摘要提供的功能在本質上與OpenSSL庫提供的功能是一致的。

    (6)SQLite

             iPhone應用中可以嵌入一個小型SQL資料庫SQLite,而不需要在遠端執行另一個數據庫伺服器。開發者可以建立本地資料庫檔案,並管理這些 檔案中的表格和記錄。資料庫SQLite為通用的目的而設計,但仍可以優化為快速訪問資料庫記錄。訪問資料庫SQLite的標頭檔案位 於<iPhoneSDK>/usr/include/sqlite3.h,其中<iPhoneSDK>是SDK安裝的目標路徑。

    (7)支援XML

             基礎框架提供NSXMLParser類,解析XML文件元素。libXML2庫提供操作XML內容的功能,這個開放原始碼的庫可以快速解析和編輯 XML資料,並且轉換XML內容到HTML。訪問libXML2庫的標頭檔案位於目錄<iPhoneSDK>/usr/include /libxml2/,其中<iPhoneSDK>是SDK安裝的目標目錄。

三、媒體層(Media layer):

      如同其名,Media層提供了圖片,音樂,影片等多媒體功能。影象分為2D影象和3D影象, 前者由Quartz2D來支援,後者則是用OpenglES.與音樂對應的模組是Core Audio和OpenAL, Media Player 實現了影片的播放, 而最後還提供了Core Animation來對強大動畫的支援。具體介紹如下:

   (1)影象技術(Graphics Technologies)

        高質量影象是所有iPhone應用的一個重要的組成部分。任何時候,開發者可以採用UIKit 框架中已有的檢視和功能以及預定義的影象來開發iPhone應用。然而,當UIKit 框架中的檢視和功能不能滿足需求時,開發者可以應用下面描述的技術和方法來製作檢視。

        ① Quartz。核心影象框架(CoreGraphics.framework)包含了Quartz 2D畫圖API,Quartz與在Mac OS中採用的向量圖畫引擎是一樣先進的。Quartz支援基於路徑(Path-based)畫圖、抗混淆(Anti-aliased)過載、梯度 (Gradients)、影象(Images)、顏色(Colors)、座標空間轉換(Coordinate-space Transformations)、pdf文件建立、顯示和解析。雖然API是基於C語言的,它採用基於物件的抽象表徵基礎畫圖物件,使得影象內容易於儲存和複用。

        ② 核心動畫(Core Animation)。Quartz核心框架(QuartzCore.framework)包含CoreAnimation介面,Core Animation是一種高階動畫和合成技術,它用優化的過載路徑(Rendering Path)實現複雜的動畫和虛擬效果。它用一種高層的Objective-C介面配置動畫和效果,然後過載在硬體上獲得較好的效能。Core Animation整合到iPhone OS 的許多部分,包括UIKit類如UIView,提供許多標準系統行為的動畫。開發者也能利用這個框架中的Objective-C介面建立客戶化的動畫。

        ③ OpenGL ES。OpenGL ES框架(OpenGLES.framework)符合OpenGL ES v1.1規範,它提供了一種繪畫2D和3D內容的工具。OpenGL ES 框架是基於C語言的框架,與硬體裝置緊密相關,為全屏遊戲類應用提供高幀率(high frame rates)。開發者總是要使用OpenGL框架的EAGL介面,EAGL介面是OpenGL ES框架的一部分,它提供了應用的OpenGL ES畫圖程式碼和本地視窗物件的介面。

      (2)音訊技術(Audio Technologies)

       iPhone OS的音訊技術為使用者提供了豐富的音訊體驗。它包括音訊回放,高質量的錄音和觸發裝置的振動功能等。

       iPhone OS的音訊技術支援如下音訊格式:AAC、Apple Lossless(ALAC)、A-law、IMA/ADPCM(IMA4)、Linear PCM、μ-law和Core Audio等。

       ① 核心音訊(Core Audio Family)。核心音訊框架家族(Core Audio family of frameworks)提供了音訊的本地支援,如表16-1所示。Core Audio是一個基於C語言的介面,並支援立體聲(Stereo Audio)。開發能採用iPhone OS 的Core Audio框架在iPhone 應用中產生、錄製、混合和播放音訊。開發者也能通過核心音訊訪問手機裝置的振動功能。

       核心音訊框架:

框架(Framework

服務(Service

CoreAudio.framework

定義核心音訊的音訊資料型別

AudioUnit.framework

提供音訊和流媒體檔案的

回放和錄製,並且管理音

頻檔案和播放提示聲音

AudioToolbox.framework

提供使用內建音訊單元服務,

音訊處理模組


        ② OpenAL。iPhone OS 也支援開放音訊庫(Open Audio Library, OpenAL)。OpenAL是一個跨平臺的標準,它能傳遞位置音訊(Positional Audio)。開發者能應用OpenAL在需要位置音訊輸出的遊戲或其他應用中實現高效能、高質量的音訊。

           由於OpenAL是一個跨平臺的標準,採用OpenAL的程式碼模組可以平滑地移植到其他平臺。

       (3)視訊技術(Video Technologies)

         iPhone OS通過媒體播放框架(MediaPlayer.framework)支援全屏視訊回放。媒體播放框架支援的視訊檔案格式包括.mov, .mp4,.m4v和.3gp,並應用如下壓縮標準:

         ① H.264 Baseline Profile Level 3.0 video,在30 f/s 的情況下解析度達到640×480畫素。注意:不支援B frames;

         ② MPEG4規範的視訊部分;

         ③ 眾多的音訊格式,包含在音訊技術的列表裡,如AAC、Apple Lossless (ALAC)、A-law、IMA/ADPCM(IMA4)、線性PCM、μ-law和Core Audio等。      

四、可觸控層(Cocoa Touch layer):

      最上面一層是Cocoa Touch,它是Objective-C的API, 其中最核心的部分是UIKit.Framework,應用程式介面上的各種元件,全是由它來提供呈現的,除此之外它還負責處理螢幕上的多點觸控事件,文字的輸出,圖片,網頁的顯示,相機或檔案的存取,以及加速感應的部分等。具體介紹如下:

       (1)UIKit框架

         UIKit框架(UIKit.framework)包含Objective-C程式介面,提供實現圖形,事件驅動的iPhone應用的關鍵架構。 iPhone OS中的每一個應用採用這個框架實現如下核心功能:

        應用管理;

        支援圖形和視窗;

        支援觸控事件處理;

        使用者介面管理;

        提供用來表徵標準系統檢視和控制元件的物件;

        支援文字和Web內容;

        通過URL scheme與其他應用的整合。

        為提供基礎性程式碼建立應用,UIKit也支援一些與裝置相關的特殊功能,如下所示:

        加速計資料;

        內建Camera;

        使用者圖片庫;

        裝置名稱和模式資訊。

      (2)基礎框架(Foundation Framework)

           基礎框架(Foundation.framework)支援如下功能:

           Collection資料型別(包括Arrays、Sets);

           Bundles;

           字串管理;

           日期和時間管理;

           原始資料塊管理;

           首選項管理;

           執行緒和迴圈;

           URL和Stream處理;

           Bonjour;

           通訊埠管理;

           國際化。

      (3)電話本UI框架(Address Book UI Framework)

 電話本UI框架(AddressBookUI.framework)是一個Objective-C標準程式介面,主要用來建立新聯絡人,編輯和選擇 電話本中存在的聯絡人。它簡化了在iPhone應用中顯示聯絡人資訊,並確保所有應用使用相同的程式介面,保證應用在不同平臺的一致性。

總結:

       當我們要開發iPhone程式的時候,首先要現從上層入手,優先使用Objective-C封裝後的庫,也就是通過 UIKit.framework搭配Foundation.framework來進行開發,而當面對一些比較複雜的功能時,像是多媒體的處理或是繪圖,再往下層去找尋相關的framwork開完成。