1. 程式人生 > >iOS 系統架構和常用框架 (iOS開發篇)

iOS 系統架構和常用框架 (iOS開發篇)

(一)iOS的系統架構

iOS基於UNIX系統,iOS的系統架構分為四層,由上到下一次為:可觸控層(Cocoa Touch layer)、媒體層(Media layer)、核心服務層(Core Services layer)、核心作業系統層(Core OS layer),如下圖:

(1)觸控層:為應用程式開發提供了各種常用的框架並且大部分框架與介面有關,本質上來說它負責使用者在iOS裝置上的觸控互動操作。如NotificationCenter的本地通知和遠端推送服務,iAd廣告框架,GameKit遊戲工具框架,訊息UI框架,圖片UI框架,地圖框架,連線手錶框架,自動適配等等

(2)媒體層:提供應用中視聽方面的技術,如圖形影象相關的CoreGraphics,CoreImage,GLKit,OpenGL ES,CoreText,ImageIO等等。聲音技術相關的CoreAudio,OpenAL,AVFoundation,視訊相關的CoreMedia,Media Player框架,音視訊傳輸的AirPlay框架等等。

(3)核心服務層:提供給應用所需要的基礎的系統服務。如Accounts賬戶框架,廣告框架,資料儲存框架,網路連線框架,地理位置框架,運動框架等等。這些服務中的最核心的是CoreFoundation和Foundation框架,定義了所有應用使用的資料型別。CoreFoundation是基於C的一組介面,Foundation是對CoreFoundation的OC封裝。

(4)核心作業系統層包括:包含大多數低級別接近硬體的功能,它所包含的框架常常被其它框架所使用。Accelerate框架包含數字訊號,線性代數,影象處理的介面。針對所有的iOS裝置硬體之間的差異做優化,保證寫一次程式碼在所有iOS裝置上高效執行。CoreBluetooth框架利用藍芽和外設互動,包括掃描連線藍芽裝置,儲存連線狀態,斷開連線,獲取外設的資料或者給外設傳輸資料等等。Security框架提供管理證書,公鑰和私鑰信任策略,keychain,hash認證數字簽名等等與安全相關的解決方案。 

框架是一個目錄,這個目錄包含了共享庫,訪問共享庫裡程式碼的標頭檔案,和其它的圖片和聲音的資原始檔。一個共享庫定義的方法或函式可以被應用程式呼叫。

       IOS提供了很多你可以在應用程式裡呼叫的框架。要使用一個框架,需要將它新增到你的專案中,你的專案才可以使用它。許多應用程式都使用瞭如Foundation、UIKit、和Core Graphics這些框架。根據你為應用程式選擇的模版,相關的框架就已經被自動引入了。如果預設加入的框架不能滿足你的應用程式的需求,你也可以加入需要的框架。

       看看HelloWorld.xcodeproj專案裡都包含了哪些框架(注:HelloWorld.xcodeproj是《Your First iOS App tutorial 》這篇教程裡的一個專案)

       1.在XCode裡開啟HelloWorld.xcodeproj專案(如果還沒有開啟)

       2. 在project navigator窗口裡點選,點選Frameworks目錄前面的三角形圖示。你會看到:

            UIKit.framework,Foundation.framework, 和CoreGraphics.framework

       3. 點選任意一個framework前面的三角,然後再點選Headers前面的三角,可以看到框架裡的標頭檔案。

        每個框架對應IOS系統裡的一層,每層建立在它下面層的上面。應該儘量使用上層的框架來代替下面的框架。更高層次的框架是對底層框架基於物件的抽象。

在你開發程式時,主要使用框架就是Foundation和UIKit,因為它們包含了你需要的大部分東西。

Foundation框架為所有的應用程式提供基本系統服務

        你的應用程式,UIKit和其它的框架都是建立在Foundation框架上面的。Foundation框架是用Object-C對Core Foundation框架裡許多特性的封裝。

       使用Foundation可以:

  • 建立和管理集合,比如:陣列和字典
  • 訪問儲存在應用程式裡的圖片和其它資源
  • 建立和管理字串
  • 提交和接收通知
  • 建立日期和時間物件
  • 自動發現IP網路上的裝置
  • 操作URL流
  • 執行非同步程式碼

比如,你使用一個NSString類的例項儲存使用者輸入的userName。你還使用了Foundation框架的initWithFormat方法建立了一個字串。

UIKit框架提供建立基於觸控使用者介面的類

      所有的iOS應用程式都基於UIKit,你不能是應用程式脫離這個框架。UIKit提供了在螢幕上繪製的機制,捕獲事件,和建立通用使用者介面元素。UIKit也通過管理顯示在螢幕上的元件來組織複雜的專案。

      使用UIKit可以:

  • 構建和管理你的使用者介面
  • 捕獲觸控和基於移動的事件
  • 呈現文字和web內容
  • 優化你的多工程式
  • 建立定製的使用者介面元素

     當你仔細檢視程式是怎麼執行起來的時候,你會看到UIApplicationMain函式建立一個UIApplication類的例項,這個例項會捕獲進來的使用者事件。你實現UITextFieldDelegate協議,然後在使用者按下Done時隱藏鍵盤。實際上,你是在使用UIKit建立使用者介面上的UITextField, UILabel,和UIButton類。

ore Data , Core Graphics, Core Animation,和OpenGLES框架都是高階的技術。所以這些框架對於你開發應用程式也是很重要的,它們都需要時間去學習和掌握。

Core Data框架管著理應用程式資料模型

         Core Data提供物件的管理,使用Core Data,你可以建立模型物件,並管理這些物件。你管理這這些物件間的聯絡並修改資料。Core Data提供的內建SQLlite技術可以高效的管理資料。

         使用Core Data可以:

  • 在庫裡儲存和接收物件
  • 提供基本的undo/redo
  • 自動驗證屬性值
  • 過濾、分組和優化記憶體中的資料
  • 用[NSFetchedResultsController]管理表檢視中的結果
  • 支援基於文件的應用程式

Core Graphics框架幫助你建立圖形

       高質量的圖形對於所有的iOS應用程式都是很重要的。在iOS中最簡單且最快捷的建立圖形的方式是使用UIKit框架提供的基於預渲染圖形的檢視和控制元件,然後讓UIKit和iOS完成繪製。但是當你需要建立複雜的圖形時,Core Graphics則提供了更底層的庫來幫助你。

       使用Core Graphics可以:

  • 建立基於路徑的繪圖
  • 抗鋸齒渲染
  • 新增梯度、圖片和顏色
  • Use coordinate-space transformations.
  • 建立、顯示和分析PDF文件

Core Animation允許你建立高階的動畫和虛擬效果

           UIKit提供建立在Core Animation之上的動畫。如果你需要比UIKit能力更高階的功能,可以直接使用Core Animation。Core Animation介面包含在Quartz Core框架裡。使用Core Animation可以建立巢狀的物件,並且可以對它們操作、旋轉、縮放和轉換。使用Core animation,你可以建立動態的使用者介面而不用使用更底層的圖形API,如OpenGL ES。

           使用Core Animation可以:

  • 建立定製動畫
  • 新增定時函式和圖形
  • 支援幀動畫
  • Specify graphical layout constraints.
  • Group multiple-layer changes into anatomic update.

OpenGL ES 框架提供2D和3D繪圖工具

OpenGL ES支援2D和3D繪圖,Apple的OpenGL ES實現通過硬體提供了高速的全屏遊戲式的應用程式。

           使用OpenGL ES可以:

  • 建立2D和3D圖形
  • 建立更復雜的圖形,比如資料虛擬化、模擬飛行,或者視訊遊戲
  • 訪問底層圖形裝置