iOS系統架構和常用框架

一)iOS的系統架構

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

image

(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認證數字簽名等等與安全相關的解決方案。

image

框架是一個目錄,這個目錄包含了共享庫,訪問共享庫里代碼的頭文件,和其它的圖片和聲音的資源文件。一個共享庫定義的方法或函數可以被應用程序調用。

IOS提供了很多你可以在應用程序里調用的框架。要使用一個框架,需要將它添加到你的項目中,你的項目才可以使用它。許多應用程序都使用了如Foundation、UIKit、和CoreGraphics這些框架。 根據你為應用程序選擇的模版,相關的框架就已經被自動引入了。 如果默認加入的框架不能滿足你的應用程序的需求,你也可以加入需要的框架。
看看HelloWorld.xcodeproj項目里都包含了哪些框架(注:HelloWorld.xcodeproj是《Your First iOS App tutorial 》這篇教程里的一個項目)

1.在XCode里打開HelloWorld.xcodeproj項目(如果還沒有打開)

  1. 在project navigator窗口里點擊,點擊Frameworks目錄前面的三角形圖標。你會看到: UIKit.framework,Foundation.framework, 和CoreGraphics.framework
  2. 點擊任意一個framework前面的三角,然后再點擊Headers前面的三角,可以看到框架里的頭文件。
    每個框架對應IOS系統里的一層,每層建立在它下面層的上面。應該盡量使用上層的框架來代替下面的框架。更高層次的框架是對底層框架基于對象的抽象。
image.png

iOS應用程序基于Foundation和UIKit框架

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

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

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

   使用Foundation可以:
  • 創建和管理集合,比如數組和字典

  • 訪問存儲在應用程序里的圖片和其它資源

  • 創建和管理字符串

  • 提交和接收通知

  • 創建日期和時間對象

  • 自動發現IP網絡上的設備

  • 操作URL流

  • 執行異步代碼

    你已經在《Your First iOS App》里使用到了Foundation框架。比如,你使用一個NSString類的實例存儲用戶輸入的userName。你還使用了Foundation框架的initWithFormat方法創建了一個字符串。

UIKit框架提供創建基于觸摸用戶界面的類

  所有的iOS應用程序都基于UIKit,你不能是應用程序脫離這個框架。UIKit提供了在屏幕上繪制的機制,捕獲事件,和創建通用用戶界面元素。UIKit也通過管理顯示在屏幕上的組件來組織復雜的項目。

  使用UIKit可以:
  • 構建和管理你的用戶界面

  • 捕獲觸摸和基于移動的事件

  • 呈現文字和web內容

  • 優化你的多任務程序

  • 創建定制的用戶界面元素

    在《YouFirst iOS App Tutorial》里,你也使用到了UIKit。當你仔細查看程序是怎么運行起來的時候,你會看到UIApplicationMain函數創建一個UIApplication類的實例,這個實例會捕獲進來的用戶事件。你實現UITextFieldDelegate協議,然后在用戶按下Done時隱藏鍵盤。實際上,你是在使用UIKit創建用戶界面上的UITextField, UILabel,和UIButton類。

你需要知道的其它重要的框架

Core 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圖形
  • 創建更復雜的圖形,比如數據虛擬化、模擬飛行,或者視頻游戲
  • 訪問底層圖形設備

根據需要向項目中添加其它框架

       還有許多框架可以添加到你的程序里。當你決定使用一個框架但項目里卻沒有引入這個框架時,你就需要將它加入到你的項目里。

[圖片上傳失敗...(image-d66a48-1625620966975)]

將別的框架添加到工程里

1 打開工程

2 點擊項目名,顯示project editor

3 在TARGETS列表中選中要添加框架的工程

4 點擊project editor頂部的Build Phases

5 點擊Link Binary With Libraries前面的三角形打開這個分組

6 通過點擊添加(+)來添加一個框架

7 在列表中選擇一個框架,然后點擊Add按鈕

設備中的框架</caption>

Accelerate.framework

包含加速數學和DSP函數。 請查看 加速框架參考

AddressBook.framework

包含直接訪問用戶聯系人數據庫的函數。請查看地址簿框架參考

AddressBookUI.framework

包含顯示系統定義的聯系人挑選界面和編輯界面的類。請查看iOS地址簿UI框架參考

AssetsLibrary.framework

包含顯示用戶照片和視頻的類,請查看資源庫框架參考

AudioToolbox.framework

包含處理音頻流數據以及播放或錄制音頻的接口。請查看音頻工具箱框架參考

AudioUnit.framework

包含加載并使用音頻單元的接口。請查看音頻單元框架參考.

AVFoundation.framework

包含播放或錄制音頻的Objective-C接口。請查看AV Foundation框架參考.。

CFNetwork.framework

包含通過WiFi或者蜂窩無線訪問網絡的接口。請查看CFNetwork框架參考

CoreAudio.framework

包含Core Audio框架使用的各種數據類型。請查看Core Audio 框架參考

CoreData.framework

包含管理應用程序數據模型的接口。請查看Core Data 框架參考

CoreFoundation.framework

提供一些基本軟件服務,包括常見數據類型抽象、字符串實用工具、群體類型實用工具、資源管理以及偏好設置。請查看rovCore Foundation框架參考

CoreGraphics.framework

包含Quartz 2D接口。請查看Core Graphics 框架參考

CoreLocation.framework

包含確定用戶方位信息的接口。請查看Core Location 框架參考

CoreMedia.framework

包含操作音頻和視頻的底層例程。請查看Core Media 框架參考

CoreMotion.framework

包含訪問加速度計以及陀螺儀的數據的接口。請查看Core Motion 框架參考

CoreTelephony.framework

包含訪問電話相關的信息的例程。請查看Core Telephony 框架參考

CoreText.framework

包含一個文本的布局渲染引擎。請查看Core Text參考集.。

CoreVideo.framework

包含操作音頻和視頻的底層例程。請不要直接使用該框架。

EventKit.framework

包含訪問用戶日歷事件數據的接口。請查看Event Kit 框架參考

EventKitUI.framework

包含顯示標準系統日歷界面的類。請查看Event Kit UI 框架參考

ExternalAccessory.framework

包含與外設進行通訊的接口。請查看External Accessory 框架參考

Foundation.framework

包含Cocoa Foundation層的類和方法。請查看Foundation 框架參考

GameKit.framework

包含點對點連接管理接口。請查看Game Kit 框架參考

iAd.framework

包含在應用程序中顯示廣告的類。請查看iAd 框架參考

ImageIO.framework

包含讀取或寫入圖像數據的類。請查看Image I/O 參考集

IOKit.framework

包含設備所使用的接口。請不要直接使用此框架。

MapKit.framework

包含將地圖界面嵌入到應用程序的類,也可以用于查找地理編碼反向坐標。請查看Map Kit框架參考

MediaPlayer.framework

包含顯示全屏視頻的接口。請查看Media Player 框架參考

MessageUI.framework

包含撰寫和排隊發送電子郵件信息的界面。請查看Message UI 框架參考

MobileCoreServices.framework

定義系統支持的統一類型標識符(UTIs)。

OpenAL.framework

包含OpenAL接口。OpenAL是一個跨平臺的方位音頻庫。如需進一步了解,請訪問http://www.openal.org

OpenGLES.framework

包含OpenGL ES接口。OpenGL ES框架是OpenGL跨平臺2D和3D渲染庫的跨平臺版本。請查看OpenGL ES 框架參考

QuartzCore.framework

包含Core Animation接口。請查看Quartz Core 框架參考

QuickLook.framework

包含預覽文件接口。請查看Quick Look 框架參考

Security.framework

包含管理證書、公鑰私鑰以及信任策略的接口。請查看Security框架參考

StoreKit.framework

包含用于處理與應用程序內購買相關的財務交易。請查看 Store Kit 框架參考

SystemConfiguration.framework

包含用于處理設備網絡配置的接口。請查看System Configuration框架參考

UIKit.framework

包含iOS應用程序用戶界面層使用的類和方法。請查看UIKit 框架參考

(二)常用的iOS SDK框架

Accelerate.framework 包含加速數學和DSP函數。

AddressBook.framework 包含直接訪問用戶聯系人數據庫的函數。

AddressBookUI.framework 包含顯示系統定義的聯系人挑選界面和編輯界面的類。

AssetsLibrary.framework 包含顯示用戶照片和視頻的類

AudioToolbox.framework 包含處理音頻流數據以及播放或錄制音頻的接口。

AVFoundation.framework 包含播放或錄制音頻的Objective-C接口。

AudioUnit.framework 包含加載并使用音頻單元的接口。

CFNetwork.framework 包含通過WiFi或者蜂窩無線訪問網絡的接口。

CoreAudio.framework 包含Core Audio框架使用的各種數據類型。

CoreData.framework 包含管理應用程序數據模型的接口。

CoreFoundation.framework 提供一些基本軟件服務,包括常見數據類型抽象、字符串實用工具、群體類型實用工具、資源管理以及偏好設置。

CoreGraphics.framework 包含Quartz 2D接口。

CoreLocation.framework 包含確定用戶方位信息的接口。

CoreMedia.framework 包含操作音頻和視頻的底層例程。

CoreMotion.framework 包含訪問加速度計以及陀螺儀的數據的接口。

CoreTelephony.framework 包含訪問電話相關的信息的例程。

CoreText.framework 包含一個文本的布局渲染引擎。

CoreVideo.framework 包含操作音頻和視頻的底層例程。

EventKit.framework 包含訪問用戶日歷事件數據的接口。

EventKitUI.framework 包含顯示標準系統日歷界面的類。

ExternalAccessory.framework 包含與外設進行通訊的接口。

Foundation.framework 包含Cocoa Foundation層的類和方法。

GameKit.framework 包含點對點連接管理接口。

iAd.framework 包含在應用程序中顯示廣告的類。

ImageIO.framework 包含讀取或寫入圖像數據的類。

IOKit.framework 包含設備所使用的接口。

MapKit.framework 包含將地圖界面嵌入到應用程序的類,也可以用于查找地理編碼反向坐標。

MediaPlayer.framework 包含顯示全屏視頻的接口。

MessageUI.framework 包含撰寫和排隊發送電子郵件信息的界面。

MobileCoreServices.framework 定義系統支持的統一類型標識符(UTIs)。

OpenAL.framework 包含OpenAL接口。OpenAL是一個跨平臺的方位音頻庫。

OpenGLES.framework包含OpenGL ES接口。OpenGL ES框架是OpenGL跨平臺2D和3D渲染庫的跨平臺版本。

QuartzCore.framework 包含Core Animation接口。。

QuickLook.framework 包含預覽文件接口。

Security.framework 包含管理證書、公鑰私鑰以及信任策略的接口。

StoreKit.framework 包含用于處理與應用程序內購買相關的財務交易。

SystemConfiguration.framework 包含用于處理設備網絡配置的接口。

UIKit.framework 包含iOS應用程序用戶界面層使用的類和方法。

參考: https://blog.csdn.net/bobo553443/article/details/78666760

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容