iOS的系統架構分為四個層次:核心操作系統層(Core OS layer)、核心服務層(Core Services layer)、媒體層(Media layer)和可觸摸層(Cocoa Touch layer)。理解ios的系統構架,對我們日常開發有很大幫助.其實iOS是基于UNIX的,所以我們完全可以相信這個操作系統,要知道從系統的穩定性上來說它要比其他操作系統的產品好很多。
ios整個框架架構圖如下:
1、Core OS 核心層:包含Accelerate Framework、External Accessory Framework、Security Framework、System等幾個框架,基本都是基于C語言的接口
2、Core Services核心服務層:包含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語言的接口。
3、Mediah媒體層:包含Core Graphics、Core Animation、OpenGL ES、Core Text、Image I/O、Assets Library Framework、Media Player Framework、AV Foundation、OpenAL、Core Audio Frameworks、AV Foundation、Core Media等等
4、Cocoa Touch 觸摸層:包括Address BookUI Framework、Event Kit UI Framework、Game Kit Framework、iAd Framework、Map Kit Framework、Message UI Framework、UIKit Framework等等,這一層基本都是基于Objective-C的接口
IOS操作系統的層次結構及相關框架
編寫成型的產品,需要的不僅僅是語言本身,同時許多庫需要協同使用。語言只是產品開發的“膠水”,而框架和上面的這些庫才是 iOS 產品的骨架。
Cocoa 是蘋果開發體系的統稱,Cocoa 包含一些主要的 OC 對象庫,我們稱這些對象庫為框架。框架是由許多類、方法、函數和文檔按照一定的邏輯組織起來的集合,以使研發程序更容易。為所有程序開發奠定基礎的框架稱為 Foundation 框架。
術語 Cocoa:是指 Foundation 、Core Data 和 AppKit(Application Kit) 框架框架。用于 Mac OS X 設備上的應用程序開發。
術語 Cocoa Touch:是指 Foundation 、Core Data 和 UIKit 框架。用于 iOS 設備上的應用程序開發。
1)Core OS 核心層:
包含 Accelerate Framework、External Accessory Framework、Security Framework、System 等幾個框架,基本都是基于 C 語言的接口。是最接近于操作系統的一層,在這個層次上,主要實現硬件以及操作系統接口封裝。是用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技術的頭文件位于目錄/usr/include/,iPhoneSDK是SDK的安裝目錄。
2)Core Services 核心服務層:
包含 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 語言的接口。
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)Foundation 框架提供數值了字符串、數值的管理、容器及枚舉、分布式計算、事件循環、URL與數據流操作、國際化、以及其他與圖形用戶界面沒有直接關系的功能。其中類和常數常用NS前綴來標志。
你的應用程序,UIKit和其它的框架都是建立在Foundation框架上面的。Foundation框架是用Object-C對Core Foundation框架里許多特性的封裝。
使用Foundation可以:
? ? ? ? ? ? ? ? ? ? ? 創建和管理集合,比如數組和字典
? ? ? ? ? ? ? ? ? ? ? 訪問存儲在應用程序里的圖片和其它資源
? ? ? ? ? ? ? ? ? ? ? 創建和管理字符串
? ? ? ? ? ? ? ? ? ? ? 提交和接收通知
? ? ? ? ? ? ? ? ? ? ? 創建日期和時間對象
? ? ? ? ? ? ? ? ? ? ?自動發現IP網絡上的設備
? ? ? ? ? ? ? ? ? ? ?操作URL流
? ? ? ? ? ? ? ? ? ? ?執行異步代碼
(2)Core Data 框架主要在數據模型、數據存儲方面發揮作用。在程序運行的時候,Core Data 框架會創建并管理數據模型的實例,同時還對外提供數據模型訪問接口。除此之外,Core Data 還可以將對象數據存儲在 SQLite 數據庫以獲得性能優化、管理 undo/redo(撤銷/重做)等操作,還支持在內存中對數據進行歸類、過濾及組織數據。
Core Data提供對象的管理,使用Core Data,你可以創建模型對象,并管理這些對象。你管理這這些對象間的聯系并修改數據。Core Data提供的內建SQLlite技術可以高效的管理數據。
使用Core Data可以:
? ? ? ? ? ? ? ? ? ?在庫里存儲和接收對象
? ? ? ? ? ? ? ? ? ?提供基本的undo/redo
? ? ? ? ? ? ? ? ? 自動驗證屬性值
? ? ? ? ? ? ? ? ? ?過濾、分組和優化內存中的數據
? ? ? ? ? ? ? ? ? ? 用[NSFetchedResultsController]管理表視圖中的結果
? ? ? ? ? ? ? ? ? ? 支持基于文檔的應用程序
(3)電話本
電話本框架(AddressBook.framework)提供了保存在手機設備中的電話本編程接口。開發者能使用該框架訪問和修改存儲在用戶聯系人數據庫里的記錄。例如,一個聊天程序可以使用該框架獲得可能的聯系人列表,啟動聊天的進程(Process),并在視圖上顯示這些聯系人信息等。
(4)核心基礎框架
核心基礎框架(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)。
(5)CFNetwork
CFNetwork框架(CFNetwork.framework)是一組高性能的C語言接口集,提供網絡協議的面向對象的抽象。開發者可以使用 CFNetwork框架操作協議棧,并且可以訪問低層的結構如BSD Sockets等。同時,開發者也能簡化與FTP和HTTP服務器的通信,或解析DNS等任務。使用CFNetwork框架實現的任務如下所示:
BSD Sockets;
利用SSL或TLS創建加密連接;
解析DNS Hosts;
解析HTTP協議,鑒別HTTP和HTTPS服務器;
在FTP服務器工作;
發布、解析和瀏覽Bonjour服務。
(6)核心位置框架(Core Location Framework)
核心位置框架(CoreLocation.framework)主要獲得手機設備當前的經緯度,核心位置框架利用附近的GPS、蜂窩基站或Wi- Fi信號信息測量用戶的當前位置。iPhone地圖應用使用這個功能在地圖上顯示用戶的當前位置。開發者能融合這個技術到自己的應用中,給用戶提供一些位置信息服務。例如可以提供一個服務:基于用戶的當前位置,查找附近的餐館、商店或設備等。
(7)安全框架(Security Framework)
iPhone OS除了內置的安全特性外,還提供了外部安全框架(Security.framework),從而確保應用數據的安全性。該框架提供了管理證書、公鑰/私鑰對和信任策略等的接口。它支持產生加密安全的偽隨機數,也支持保存在密鑰鏈的證書和密鑰。對于用戶敏感的數據,它是安全的知識庫(Secure Repository)。CommonCrypto接口也支持對稱加密、HMAC和數據摘要。在iPhone OS里沒有OpenSSL庫,但是數據摘要提供的功能在本質上與OpenSSL庫提供的功能是一致的。
(8)SQLite
iPhone應用中可以嵌入一個小型SQL數據庫SQLite,而不需要在遠端運行另一個數據庫服務器。開發者可以創建本地數據庫文件,并管理這些文件中的表格和記錄。數據庫SQLite為通用的目的而設計,但仍可以優化為快速訪問數據庫記錄。訪問數據庫SQLite的頭文件位于/usr/include/sqlite3.h,其中是SDK安裝的目標路徑。
(9)支持XML
基礎框架提供NSXMLParser類,解析XML文檔元素。libXML2庫提供操作XML內容的功能,這個開放源代碼的庫可以快速解析和編輯 XML數據,并且轉換XML內容到HTML。訪問libXML2庫的頭文件位于目錄/usr/include /libxml2/,其中是SDK安裝的目標目錄。
3)Media 媒體層:
包含 Core Graphics、Core Animation、OpenGL ES、Core Text、Image I/O、Assets Library Framework、Media Player Framework、AV Foundation、OpenAL、Core Audio Frameworks、AV Foundation、Core Media 等等。
如同其名,Media層提供了圖片,音樂,影片等多媒體功能。圖像分為2D圖像和3D圖像,前者由Quartz2D來支持,后者則是用OpenglES.與音樂對應的模組是Core Audio和OpenAL, Media Player 實現了影片的播放, 而最后還提供了Core Animation來對強大動畫的支持。
媒體層包含圖形技術(包含動畫技術)、音頻技術和視頻技術,可以使用這層的技術更快速的創建高級的圖形和動畫,方便的獲得音頻、視頻的支持。
(1)圖像技術(Graphics Technologies):是 iOS 應用程序的重要組成部分。創建應用程序最簡單、最有效的方法是使用事先渲染過的圖片,搭配上標準視圖以及 UIKit 框架的控件,然后把繪制任務交給系統來執行。
a. ? ? Core Graphics :也被稱為 Quartz,用于處理本地 2D 向量渲染和圖片渲染。
Quartz。核心圖像框架(CoreGraphics.framework)包含了Quartz 2D畫圖API,Quartz與在Mac OS中采用的矢量圖畫引擎是一樣先進的。Quartz支持基于路徑(Path-based)畫圖、抗混淆(Anti-aliased)重載、梯度(Gradients)、圖像(Images)、顏色(Colors)、坐標空間轉換(Coordinate-space Transformations)、pdf文檔創建、顯示和解析。雖然API是基于C語言的,它采用基于對象的抽象表征基礎畫圖對象,使得圖像內容易于保存和復用。
在iOS中最簡單且最快捷的創建圖形的方式是使用UIKit框架提供的基于預渲染圖形的視圖和控 件,然后讓UIKit和iOS完成繪制。但是當你需要創建復雜的圖形時,Core Graphics則提供了更底層的庫來幫助你。
使用Core Graphics可以:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創建基于路徑的繪圖、
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?抗鋸齒渲染、
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?添加梯度、圖片和顏色、
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Use coordinate-space transformations.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 創建、顯示和分析PDF文檔
b.? ? 核心動畫(Core Animation):Quartz Core 框架的一部分,為動畫視圖和其他內容提供更高級別支持。
Quartz核心框架(QuartzCore.framework)包含CoreAnimation接口,Core Animation是一種高級動畫和合成技術,它用優化的重載路徑(Rendering Path)實現復雜的動畫和虛擬效果。它用一種高層的Objective-C接口配置動畫和效果,然后重載在硬件上獲得較好的性能。Core Animation集成到iPhone OS 的許多部分,包括UIKit類如UIView,提供許多標準系統行為的動畫。開發者也能利用這個框架中的Objective-C接口創建客戶化的動畫。
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.
c. ? ? ? OpenGl ES :為使用硬件加速接口的 2D 和 3D 渲染提供支持。
OpenGL ES框架(OpenGLES.framework)符合OpenGL ES v1.1規范,它提供了一種繪畫2D和3D內容的工具。OpenGL ES 框架是基于C語言的框架,與硬件設備緊密相關,為全屏游戲類應用提供高幀率(high frame rates)。開發者總是要使用OpenGL框架的EAGL接口,EAGL接口是OpenGL ES框架的一部分,它提供了應用的OpenGL ES畫圖代碼和本地窗口對象的接口。
OpenGL ES支持2D和3D繪圖,Apple的OpenGL ES實現通過硬件提供了高速的全屏游戲式的應用程序。
使用OpenGL ES可以:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創建2D和3D圖形
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創建更復雜的圖形,比如數據虛擬化、模擬飛行,或者視頻游戲
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 訪問底層圖形設備
d. ? ? ? Core Text :提供一個精密的文本布局和渲染引擎。
f. ? ? ? ? Image I/O :提供讀取及編寫大多數圖形格式的接口。
Assets Library framework :資產庫框架,用于訪問用戶照片庫中的照片和視頻。
(2)音頻技術(Audio Technologies):iOS 音頻技術可以用來播放或錄制高質量的音頻,也可以用于觸發設備的震動功能。
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的代碼模塊可以平滑地移植到其他平臺。
媒體播放器框架:是可以拿來即用的播放器。
AV Foundation :提供用于管理音頻的播放或錄制的接口。
Core Audio :可以使用此框架的接口播放系統的警報聲音、觸發的震動功能、管理多聲道的緩沖和播放、對音頻內容進行流化處理。
(3)視頻技術:可用于播放應用程序包含的電影文件以及來自網絡的數據流內容。如果設備具有合適的視頻硬件,這些技術也可以用于捕捉視頻,并可將捕捉到的視頻集成到應用程序。
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等。
媒體播放器框架:可用于播放應用程序中全屏或部分屏的電影。
AV Foundation :可以對電影的捕捉和播放進行管理。
Core Media :對較高級框架使用的底層類型進行描述,同時也提供一些底層接口,用于對媒體進行處理。
4)Cocoa Touch 觸摸層:
包括 Address Book UI Framework、Event Kit UI Framework、Game Kit Framework、iAd Framework、Map Kit Framework、Message UI Framework、UIKit Framework 等等,這一層基本都是基于 Objective-c 的接口。
包含了用于 iOS 應用開發的圖形界面構建的類。其中所有的類,都以“UI”為前綴。
1)UIKit
所有的iOS應用程序都基于UIKit,你不能是應用程序脫離這個框架。UIKit提供了在屏幕上繪制的機制,捕獲事件,和創建通用用戶界面元素。UIKit也通過管理顯示在屏幕上的組件來組織復雜的項目。
使用UIKit可以:
? ? ? ? ? ? ? ?構建和管理你的用戶界面
? ? ? ? ? ? ? ?捕獲觸摸和基于移動的事件
? ? ? ? ? ? ? ?呈現文字和web內容
? ? ? ? ? ? ? ?優化你的多任務程序
? ? ? ? ? ? ? ?創建定制的用戶界面元素
(2)電話本UI框架(Address Book UI Framework)
電話本UI框架(AddressBookUI.framework)是一個Objective-C標準程序接口,主要用來創建新聯系人,編輯和選擇電話本中存在的聯系人。它簡化了在iPhone應用中顯示聯系人信息,并確保所有應用使用相同的程序接口,保證應用在不同平臺的一致性。