在iOS中框架是一個目錄,包含了共享資源庫,用於訪問該資源庫中儲存的代碼的頭文件,以及圖像、聲音文件等其他資源。共享資源庫定義應用程序可以調用的函數和方法。
iOS為應用程序開發提供了許多可使用的框架,並構成IOS操作系統的層次架構,分為四層,從上到下依次為:Cocoa Touch Layer(觸摸UI層)、MediaLayer(媒體層)、Core Services Layer(核心服務層)、Core OS Layer(核心OS層)。
低層次框架提供IOS的基本服務和技術,高層次框架建立在低層次框架之上用來提供更加復雜的服務和技術,較高級的框架向較低級的結構提供面向對象的抽象。
在開發應用時應盡可能使用較高級的框架。如果要開發的國內在高層框架中沒有提供,你也可以使用較低層框架和技術。
Foundation和 UIKit框架是應用編程用到的兩個主要的框架,能夠滿足大多數應用程序的開發需求。
UIKit框架提供的類,用於創建基於觸摸的用戶界面。所有 iOS 應用程序都是基於 UIKit, 沒有這個框架,就無法交付應用程序。UIKit提供應用程序的基礎架構,用於在屏幕上繪圖、處理事件,以及創建通用用戶界面及其中元素。UIKit還通過管理屏幕上顯示的內容,來組織應用程序。
Foundation框架為所有應用程序提供基本的系統服務。應用程序以及 UIKit和其他框架,都是建立在 Foundation 框架的基礎結構之上。 Foundation框架提供許多基本的對象類和數據類型,使其成為應用程序開發的基礎。它還制定了一些約定(如用於取消分配等任務),使代碼更加一致,可復用性更好。
整個框架架構圖如下:
一Cocoa Touch Layer(觸摸UI層)
CocoaTouch Layer包含創建ios應用關鍵的框架。該層包含的框架定義應用的外觀,也提供基本的應用基礎和關鍵的技術支持,例如多任務、觸摸輸入、推送通知和許多其它的高級系統服務。在開發應用時,應當首先研究該層的技術和技術看是否能夠滿足需要。
1.1 Cocoa Touch Layer包含如下關鍵技術
1).AirDrop
AirDrop允許用戶與附近設備共享圖片、文檔、urls鏈接以及其它種類的數據。
2)、Text Kit
TextKit是處理文本和排版的一個全功能、高級別的類集合。使用Text Kit你能在段落、列或者頁上對帶有風格的文本進行布局;也能在任意區域(如圖形)周圍布局流動的文本;還能用它來管理多種字體。
開發應用時應該首先考慮使用Text Kit來進行文本呈現,而不是Core Text。Text Kit與所有UIKit中的基於文本的控制集成允許應用更容易地創建、編輯、顯示和存儲文本。
3)、UIKit Dynamics
UIKit dynamics用來為符合UIDynamicItem協議的UIView對象或其它對象規定動畫行為。通過在應用的UI中集成真實世界行為和特性進,動畫行為為應用提供了一種增強用戶體驗的方式。
4)、Multitasking
在ios中多任務用來設計來使電池使用時間最大化。
5)、Auto Layout
自動布局幫助你使用非常少的代碼來建立動態接口。
使用AutoLayout定義如何在用戶接口上布局元素的規則,這些規則表達了視圖類之間的關系,如規定一個按鈕總是處於它的父窗口的左邊緣20個點。
在Auto Layout中使用的實體是被稱為constraints的Objective-C對象。
6)、Storyboards
串聯圖 是設計應用用戶接口的推薦方式。串聯圖讓你在一個地方就能夠設計全部的用戶接口,方便在一個位置看到所有的視圖和視圖控制器以及理解它們是如何一起工作的。串聯圖的一個重要的部分是定義segues(segues是從一個視圖控制器到另一個的轉換)。這些轉換代表用戶接口之間的交互。你可以使用XCOE來可視的定義這些轉換或者通過編程啟動它們。
你能使用一個單串聯圖文件來存儲所有的應用視圖控制器和視圖,或者使用多個視圖串聯圖文件來組織用戶接口。
在應用建立時間,Xcode讀取串聯圖文件的內容並把它分成多個能獨立加載的離散的片斷,以便獲得更好的性能。UIKit框架提供了相應的類來從程序中存取一個串聯圖的內容。
7)、UI State Preservation
UI狀態保存能夠使應用表現的一直運行,從而為用戶提供無縫的體驗。如果系統遇到內存壓力,系統可能安靜地強制停止一個或多個后台應用。
當應用從前台移到后台時,該服務能保存應用的視圖和視圖控制器的狀態。在下次應用重新啟動時,能夠使用先前保存的狀態信息來恢復視圖和視圖控制器到它們先前的配置,使應用表現得好像一直在運行。
8)、Apple Push Notification Service
蘋果的推送通知服務提供了一種提示用戶關於新信息的方式,即使應用當前不在激活運行狀態。
使用該服務,你能推送文本通知,在應用圖標上增加一個標記或者在任意時間觸發聲音提示。
這些消息讓用戶知道他們應該打開應用來接收相關信息。自Ios7開始,你甚至能推送無聲的通知來讓應用知道有了新的內容可以下載。
為了使用IOS應用的推送通知,用戶需要做兩部分的工作。首先應用必須登記該通知服務以及在通知被提交時處理相關的通知數據。第二,你必須提供一個服務端的進程來產生通知。
服務端的進程可以使用你自己的本地服務器或者使用蘋果的推送通知服務。
9)、Local Notifications
本地通知作為推送通知機制的補充,可以給應用提供一種不依賴外部服務器產生本地通知的方式。
運行在后頭的應用能使用本地通知作為當重要的事件發生時引起用戶注意的一種方式。例如,運行在后台的導航應用能使用本地通知來提示用戶什么時間該轉彎了。
應用也能調度本地通知在將來的時間提交以及使那些通知在應用不運行也能被提交。
本地通知的一個優點是它們與你的應用是獨立的。在一個通知已被調度,系統管理它的提交。另外當通知被提交時你的應用甚至不必運行。
10)、Gesture Recognizers
手勢識別用來檢測通常類型的手勢。由於手勢識別使用與系統檢測手勢相同的試探方法,因此手勢識別為應用提供了一個一致的行為。為了使用它,你能在你的視圖上附加手勢識別功能和並給它提供一個在手勢出現時要執行的方法。
手勢識別跟蹤原始的觸摸事件和確定它們什么時候與想要的手勢匹配。
11)、System View Controllers
許多系統框架為標准的系統接口定義了視圖控制器。只要有可能,為了呈現一致的用戶體驗,就應該使用系統提供的視圖控制器而不是創建一個新的。
2.2 Cocoa Touch層框架
CoCoa Touch層包含如下框架:
1、Address Book UI Framework(地址本UI框架)
該框架提供一個面向對象的編程接口。用來顯示標准的系統接口,來創建新的聯系人和編輯和選擇已存在的聯系人。
2、Event Kit UI Framework(月歷事件UI框架)
該框架提供一個視圖控制器來呈現標准的系統接口,來觀察和編輯月歷相關的事件。EventKit UI Framework基於Event Kit framework框架。
3、Game Kit Framework(游戲工具框架)
該框架實現對游戲中心的支持,讓用戶能夠在線共享他們的游戲相關的信息。
4、iAd Framework(iAD框架)
該框架用來在應用中提供廣告條。
當你想要顯示廣告時,廣告條與用戶UI上的標准的視圖進行合並。
這些視圖與蘋果的iAd服務一起工作,自動處理、加載和呈現富媒體廣告以及應答在那些廣告條上的點擊等所有相關的工作。
5、Map Kit Framework(地圖工具框架)
MapKit提供與應用的UI組合的一個可滾動的地圖。
除了顯示一個地圖,你能使用該框架接口來定制地圖的內容和外觀,也能使用注解來標記感興趣的點,也能使用定制的內容來與地圖內容疊置。例如,你可以在地圖上來畫一條公交路線,或者使用注解來高亮顯示附近的商店和餐館。
除了顯示地圖,MapKit框架還能與地圖應用以及蘋果的地圖服務器集成來為用戶指引方向。
地圖應用能夠給任意支持方向的應用提供方向的代理。如提供特定類型方向的應用,例如一個顯示地鐵路線的應用,能登記請求接收地圖應用提供的方向。
應用也能向蘋果的服務器請求步行或駕駛方向,並與他們定制的方向的路徑信息混合來為用戶提供完整的點到點體驗。
6、Message UI Framework( 消息UI框架)
該框架用來在應用中提供編輯郵件和sms消息的支持。
編輯支持包括一個呈現到你的應用的視圖控制器接口,並能設置這個視圖控制器的一些區域,如接收人、主題、郵件主體和郵件想包括的任意附件。
在呈現視圖控制器后,也能為用戶提供一個在發送郵件之前可以編輯郵件的選項。
7、UIKit Framework
該框架提供實現圖形和事件驅動的應用的至關重要的基礎。包括:
1、基本的應用管理和基礎設施,包括應用的主循環;
2、用戶接口管理,包括對storyboards和nib文件的支持;
3、一個用來封裝用戶UI內容的視圖控制器模式;
4、 標准系統視圖和控制對象;
5、提供處理觸摸和運動事件的支持;
6、支持包括與iCloud集成功能的文檔模式;
7、 圖形和窗口支持,包括支持外部顯示器;
8、多任務支持;
9、打印支持;
10、 定制標准UIKit控制的外觀;
11、支持文本和web內容;
12、剪切、復制、粘貼的支持;
13、支持動畫UI;
14、通過url語義和框架接口與系統提供的其它應用集成的能力;
15、對有障礙用戶的可存取性的支持;
16、支持ApplePush Notification服務;
17、本地通知調度和提交;
18、pdf 創建;
19、支持定制像系統鍵盤行為一樣的用戶輸入視圖;
20、支持創建與系統鍵盤交互的定制的文本視圖;
21、支持通過email,Twitter, Facebook和其它服務共享內容。
也支持一些設備特定功能的集成,例如
1、內建的攝像機;
2、用戶的圖片庫;
3、設備名和模式信息;
4、電池狀態信息;
5、接近傳感器信息;
6、來自附件耳機的遠程控制信息
二、MediaLayer(媒體層)
媒體層包含在應用中實現多媒體體驗的圖形、聲音、視頻技術和框架。使用這層的技術可以使你容易的建立更加好看和好聽的應用。
2.1 包含的關鍵技術
2.1.1 圖形技術
高質量的圖形是所有應用的重要的組成部分。IOS提供了許多幫助你定制藝術和圖形屏幕的技術。IOS圖形技術為其提供了廣泛的支持,並可以與UIKit視圖架構無縫工作。
你能使用標准的視圖來快速提交高質量的接口,或者使用本層的圖形技術創建你自己的定制視圖來提交一個更加豐富的圖形體驗。
1)、UIKit graphics
UIKit定義的繪制圖像和Bézier路徑,以及動畫視圖內容的高級別技術。
UIKit視圖提供快速和有效的方式來呈現圖像和文本內容。
UIKIT視圖也能通過顯示和使用UIKitdynamics技術進行動畫,並為用戶提供反饋,促進用戶交互。
2)、CoreGraphics 框架
CoreGraphics也稱作Quartz,是對定制的2D向量和圖像呈現提供支持的本地繪制引擎。
該框架提供的引擎雖然沒有OpenGLES引擎速度快,但該框架能夠很好地適合於呈現定制的2d圖形和動態圖像。
3)、CoreAnimation框架
CoreAnimation也是Quartz核心框架的一部分,是優化應用動畫體驗的基礎技術。
UIKit視圖基於 Core Animation提供視圖級別的動畫支持。
當你想對動畫行為有更多控制時也能直接使用CoreAnimation。
4)、Core Image
CoreImage提供非破壞的方式操作視頻和靜態圖像。
5)、OpenGL ES及GLKit
OpenGLES使用硬件加速接口來處理先進的2d 和3d 呈現。OpenGLES通常由游戲開發者或想實現沉浸式圖像體驗的開發者使用。
OpenGLES框架提供對呈現過程的全部控制,以及提供創建平滑動畫所需要的幀速。
GLKit是一組Objective-C類,以便能夠使用面向對象接口來提供OpenGL ES的強大能力。
6)、Text Kit和CoreText
Text Kit是UIKit框架的家族,用來來執行最好的排面和文本管理。如果你的應用實現先進的文本操作,Text Kit提供與應用視圖的無縫集成。
CoreText是處理先進排面和布局的低級別的c語言框架。
7)、Image I/O
ImageI/O提供讀寫大多數圖像格式的接口。
8)、Assets Library
AssetsLibrary框架讓你存取用戶的圖片、視頻和媒體。
你想在應用中集成用戶自己的內容時可以使用該框架。
2.1.2 聲音技術
聲音技術工作於底層硬件之上,為用戶提供更加豐富的聲音體驗。這些體驗包括播放和記錄高質量的聲音、處理MIDI內容以及使用設備內建的聲音 等能力,
1). Media Player framework
該框架是一個高級別的框架, 用來為用戶提供對iTunes庫存取的容易方式,也提供對播放軌跡和播放列表的支持。
當你想快速在應用中集成聲音以及不需要控制播放行為時可以使用該框架。
2)、AV Foundation
AVFoundation是管理聲音以及視頻播放和記錄的面向對象接口。
在記錄聲音和想對聲音播放過程有更好的控制時可以使用該框架。
3)、OpenAL
OpenAL是一個提供位置音效的跨平台的工業標准技術和接口。
游戲開發者經常使用該技術來提供高質量的聲音。
4)、Core Audio
Core Audio是一組簡單和智能的接口來記錄和播放聲音以及MIDI內容。
在需要對聲音有更好控制時使用該框架。
2.1.3 視頻技術
視頻技術提供管理應用中的靜態視頻內容或者播放來自Internet的視頻流的支持。
對於帶有適當的記錄硬件的設備,該框架還能夠記錄視頻以及與應用進行集成。
1).UIImagePickerController
UIImagePickerController是一個選擇用戶媒體文件的UIKit視圖控制器。
2)、Media Player
MediaPlayer框架提供一組呈現視頻內容的簡單易用的接口,該框架支持全屏和小窗口視頻播放,也為用戶提供可選的播放控制。
3)、AVFoundation
AVFoundation提供先進的視頻播放和記錄能力。
在需要對視頻呈現和記錄有更多的控制時使用該框架,例如在實時應用中分層顯示實時視頻和應用提供的其它內容。
4)、CoreMedia
CoreMedia框架為操作媒體定義低級別的數據類型和接口。
當你需要對視頻內容有無比的控制時可以使用該框架。
2.1.4 AirPlay技術
AirPlay讓應用串流聲音和視頻內容到Apple TV或者串流聲音內容到第三方揚聲器和接收器。
AirPlay內建於許多框架,包括UIKit、Media Player、AVFoundation、Core Audio。因此在大多數情況你不需要為了支持它做任何事。在使用那些框架時,當播放內容時自動獲得AirPlay支持。當用戶選擇使用AirPlay播放內容時系統自動進行路由。
2.2包含的框架
MediaLayer提供如下框架和服務。
2.2.1、Assets Library 框架
AssetsLibrary 框架(AssetsLibrary.framework)提供對用戶設備上圖片應用管理的圖片和視頻的存取。
使用該框架來存取用戶保存的圖片相冊或導入到設備的任意相冊中的圖片,你也能保存新的圖片和視頻到用戶的圖片相冊。
2.2.2、AV Foundation 框架
AVFoundation 框架 (AVFoundation.framework)提供一組播放、記錄和管理聲音和視頻內容的Objective-C類。
當你想在應用的ui接口無縫集成媒體能力時使用該框架。
你也能使用它來進行更先進的媒體處理,例如同時播放多個聲音或者控制播放和記錄過程的多個方面。
該框架提供的服務包括:
1)聲音會話管理,包括對系統聲明你的應用聲音能力;
2)對應用媒體資源的管理;
3)對編輯媒體內容的支持;
4)捕捉聲音和視頻的能力;
5)播放聲音和視頻的能力;
6)軌跡管理;
7)媒體元數據的管理;
8)立體拍攝;
9)聲音之間的精確同步;
10)提供一個確定聲音文件細節內容的Objective-C接口,例如數據格式,采樣率,通道數;
11) 通過AirPlay串流內容。
2.2.3、Core Audio 框架
Core Audio是一個對聲音處理提供本地支持的框架家族。這些框架支持聲音的產生、記錄、混合和回放。你也能使用這些接口處理MIDI內容以及串流聲音和MIDI內容到其它應用。
Core Audio框架包括如下框架:
CoreAudio.framework
定義Core Audio框架使用的所有數據類型。
AudioToolbox.framework
提供聲音文件和聲音流的播放和記錄服務。也提供管理聲音文件,播放系統警告聲音,在某些設備上觸發震動的支持。
AudioUnit.framework
提供使用內建聲音單元。也提供使你的應用的聲音內容作為對其它應用可視的聲音組件的支持。
CoreMIDI.framework
提供與MIDI設備通訊的標准方式,包括硬件鍵盤和合成器。你使用這個框架來發送和接收MIDI消息以及與通過dock連接器或網絡連接到IOS設備的MIDI外設交互。
MediaToolbox.framework
提供對聲音tap接口的存取。
2.2.4、Core Graphics 框架
CoreGraphics.framework包含Quartz 2D繪制api。
Quartz是一個原先用在OS X的先進的、向量繪制引擎。Quartz支持路徑繪制,抗鋸齒呈現,剃度,圖像,顏色,坐標空間轉換以及pdf 內容創建、顯示和分析等功能。
雖然這個api是C-based接口,但它使用了面向對象抽象來表現基本的繪制對象,因此使它容易存儲和重用圖形內容。
2.2.5、Core Image 框架
CoreImage 框架(CoreImage.framework)提供一組強大的內建過濾器來操作視頻和靜態圖像。
你能在觸摸彈起、糾正圖片以及面部和特征檢測等許多方面使用這些內建的過濾器。這些過濾器的先進特點是它們操作在非破壞方式,即原先的圖像不被改變。
這些過濾器針對底層硬件進行了優化,因此它們是快速和有效的。
2.2.6、Core Text 框架
CoreText 框架 (CoreText.framework)提供一個對文本進行布局和字體處理的簡單的、高性能的C-based接口。
該框架用在不使用TextKit但仍想獲得在字處理應用中發現的先進文本處理能力。
該框架提供了一個智能的文本布局引擎,包括在其它內容周圍環繞文本的能力,它也支持使用多種字體和呈現屬性的先進的文本風格。
2.2.7、Core Video 框架
CoreVideo 框架 (CoreVideo.framework)為Core Media框架提供緩沖和緩沖池支持。多數應用從不直接使用該框架。
2.2.8、Game Controller 框架
GameController 框架 (GameController.framework)讓你在應用中發現和配置針對iPhone/iPod/iPad設備的游戲控制器。
游戲控制器可以是物理連接到iOS設備或者是通過藍牙無線連接。GameController框架當控制器可獲得時通知你的應用讓應用可以規定哪個控制器輸入與你的應用相關。
2.2.9、GLKit 框架
GLKit框架 (GLKit.framework)包含一組簡化創建OpenGLES應用的Objective-C based 單元類。
GLKit支持應用開發的四個關鍵領域
1)GLKView和GLKViewController類提供一個OpenGLES視圖和其呈現循環的標准實現。
OpenGLES視圖代表應用管理底層的framebuffer對象。應用只需在視圖上繪制。
2) GLKTextureLoader類提供在你的應用中使用圖像轉換和加載線程,允許應用自動加載紋理圖像到應用的上下文。
能夠異步或同步加載紋理。當異步加載紋理時,應用應提供一個完成處理塊,該處理塊在紋理加載進應用上下文時被調用。
3)GLKit框架提供向量、矩陣和3d 旋轉以及提供OpenGLES 1.1上的矩陣。
4)GLKBaseEffect,GLKSkyboxEffect,和GLKReflectionMapEffect類實現給通用圖形操作提供可配置的圖形着色。尤其GLKBaseEffect類實現了OpenGL ES 1.1規范上的光亮和材質模式,簡化了移植一個應用從OpenGL ES 1.1到OpenGL ES最后版本的努力。
2.2.10、Image I/O 框架
ImageI/O 框架(ImageIO.framework)提供輸入和輸出圖像數據和圖像元數據的接口。
該框架利用CoreGraphics數據類型和功能,並支持在ios 上所有的可獲得的標准的圖像類型。你能使用這個框架存取Exif和IPTC元數據屬性。
2.2.11、Media Accessibility 框架
MediaAccessibility 框架 (MediaAccessibility.framework)管理媒體文件中closed-caption內容的呈現。
該框架與新的設置配合工作可以讓用戶決定是否允許closed-caption顯示。
2.2.12、Media Player 框架
MediaPlayer 框架(MediaPlayer.framework)提供應用中播放聲音和視頻的高級別支持。能夠使用該框架做如下工作:
1) 播放視頻到用戶屏幕或通過AirPlay到另外的設備屏幕。能夠全屏幕播放視頻或以可改變視圖大小的方式播放。
2)存取用戶的iTunes音樂庫。能夠播放音樂軌跡和播放列表、搜索音樂、給用戶提供一個媒體picker呈現接口。
3)配置和管理電影的回放。
4) 在鎖定屏幕和app 切換窗口上顯示NowPlaying信息。當內容通過AirPlay提交時還能顯示到AppleTV上。
5)檢測視頻通過AirPlay被串流的時間。
2.2.13、OpenAL 框架
OpenAudio Library (OpenAL)接口是用來在應用中提供位置音效的跨平台的標准。
能夠使用該接口在游戲和其它需要位置音效輸出的程序中實現高性能、高質量的聲音。
因為OpenAL是跨平台的標准,在iOS使用OpenAL編寫的代碼能夠容易地移植到許多其它平台。
2.2.14、OpenGL ES 框架
OpenGLES 框架 (OpenGLES.framework)提供繪制2d和3d內容的工具, 它是一個C-based的框架。
該框架以最接近設備硬件的方式為全屏沉浸式應用例如游戲提供細粒度的圖形控制和高的幀率。
你能夠與EAGL配合使用這個框架,為OpenGL ES 繪制調用和UIKit的本地窗口對象之間提供接口。
該框架支持OpenGLES 1.1, 2.0, 3.0規范。2.0規范增加了片段和頂點着色的支持,3.0規范增加了更多的功能,包括多個呈現目標和變換反饋。
2.2.15、Quartz Core 框架
QuartzCore 框架(QuartzCore.framework)包含Core Animation接口。
Core Animation是一個先進的復合技術,使用它能容易創建快和有效的view-based的動畫。
復合引擎利用底層硬件來有效的實時操作視圖內容。
只需規定動畫的起始點,CoreAnimation做剩下的工作。
因為Core Animation內嵌在UIView架構的底層,因此它總是可用的。
2.2.16Sprite Kit 框架
SpriteKit 框架 (SpriteKit.framework)框架為2d和2.5d游戲提供硬件加速的動畫系統。
SpriteKit提供大多數游戲需要的基礎,包括一個圖形引擎和動畫系統,聲音播放支持,一個物理仿真引擎。 使用SpriteKit不需你自己創建這些事情,使你聚焦在內容設計和內容的高級別的交互上。
在Sprite Kit應用中內容組織為場景。一個場景包括紋理對象,視頻,路徑圖形,核心圖像過濾器和其它的特效。SpriteKit利用這些對象,確定這些對象到屏幕上的最有效的方式。當在場景中到了動畫內容的時刻,你能使用SpriteKit來顯式規定你想執行的行動或使用物理仿真引擎來為那些對象定義物理行為(例如重力、引力或排拆力)。
除了SpriteKit框架,也有其它Xcode工具來創建顆粒發射效果和紋理圖。你能使用Xcode工具來管理應用資源和快速地更新Sprite Kit場景。
三 CoreServices Layer(核心服務層)
CoreServices Layer包含應用需要的基礎的系統服務。這些服務中的核心是CoreFoundation和Foundation框架,定義了所有應用使用的基本類型。
該層也包含獨立的技術來支持一些其它功能, 例如位置、iCloud、社交媒體和網絡。
3.1 包含的高級功能:
Peer-to-Peer Services(點到點服務)
這個Multipeer Connectivity框架提供通過藍牙進行p2p連接的能力。
你能使用p2p連接來啟動與附近設備的通訊會話。
雖然p2p連接主要用在游戲中,你也能在其它類型的應用中使用這個功能。
iCloud Storage(雲存儲)
iCloud存儲讓應用把用戶文檔和數據寫到一個中心位置,用戶然后能從他們的計算機和ios 設備存取這些數據。
使用iCloud可以使用戶文檔無所不在,意味着用戶能從任何設備閱讀或編輯那些文檔,而不需要顯式的同步或文件傳輸。存儲文檔到用戶的iCloud賬戶也為用戶提供了一層安全。即使用戶的設備丟失,那些設備上的文檔如果已經保存到iCloud就不會丟失。
應用能以兩種方式使用 iCloud存儲,每一種有不同的使用意圖:
1) iCloud文檔存儲。
可以使用這個功能在用戶的iCloud賬戶存儲用戶文檔和數據。
2)iCloud鍵值存儲。
使用這個功能在應用之間共享數據。
大多數應用使用iCloud文檔存儲來共享來自用戶賬戶的文檔。使用iCloud文檔存儲用戶關心的是文檔能否能夠在設備之間共享以及他們是否能夠從一個給定設備查看和管理那些文檔。
相對的,iCloud鍵值存儲是應用與應用的其它實例共享小量數據(幾十k字節)的方式,應用應當用它存儲非緊急的應用數據,例如設置。
Automatic Reference Counting(自動引用計數)
AutomaticReference Counting(ARC)是一個編譯級別的功能,用它來簡化Objective-C對象生命周期過程的管理,以此代替用戶必須記住什么時候應該保持和釋放對象。
ARC評估對象的生命周期需求和自動在編譯時間插入適當的方法調用。
ARC用來代替ios 的早期版本中存在的傳統的管理內存的編程模式。
新創建的工程自動使用ARC。XCODE也提供了移植工具幫助你轉換遺留的工程來使用ARC.
Block Objects(塊對象)
BlockObjects是一個能夠與你的C或Objective-C代碼集成的C語言的構造塊。一個blockobject本質上是一個異步功能和相關的數據。在其它語言中有時也被稱做closure或lambda。
Blocks尤其用作回調或放在你需要一種容易的組合執行代碼和相關數據方式的地方。
在ios,通常在下面的場景使用Blocks:
1)作為代理或代理方法的代替;
2) 作為回調功能的代替;
3)為某個一次性操作實現其完成處理函數;
4) 在一個集合中的所有項上執行一個任務;
5)與提交隊列一起執行異步任務。
Data Protection(數據保護)
DataProtection允許應用利用設備上已有的內建的加密方法來使用用戶的敏感數據。
當應用指定一個特定的文件被保護時,系統在磁盤上以加密格式存儲該文件。當設備鎖定時,該文件的內容不能被應用和任何潛在的侵入者存取。可是當設備由用戶解鎖時,一個解密key被創建允許你的應用存取那個文件。
用戶也可以使用其它級別的數據保護機制。
實現數據保護需要你考慮如何創建和管理你想保護的數據。應用必須設計在數據的創建時間加密數據,以及當用戶鎖定或解鎖設備時為存取條件改變做好准備。
File-Sharing Support(文件共享支持)
File-SharingSupport使用戶數據文件在iTunes 9.1和以后上可被其它應用獲得。一個應用聲明支持文件共享使它的/Documents目錄下的內容對其它用戶可獲得。用戶然后當需要時能夠把文件從iTunes移進或移出應用的Documents目錄。
這個特征不允許應用與相同設備上的其它應用共享應用,這需要粘貼板或一個文檔交互控制器對象。
應用為了允許文件共享支持,需要做如下工作:
1、 在應用的Info.plist文件中增加UIFileSharingEnabled鍵,並設置其值為YES。
2)、在你的應用的Documents中放你想共享的文件;
3、當設備插進用戶的計算機時,iTunes在選中設備的Apps標簽下顯式一個文件共享節;
4、用戶然后能夠增加文件到設備的文檔目錄或移動文件到桌面。
支持文件共享的應用應該能夠識別文件什么時候增加到其Documents目錄和做出適當的應答。例如應用可以使任意新文件的內容可以從它的接口獲得。也應該從不把Documents目錄的文件列表呈現給用戶來請求用戶決定對那些文件做什么。
Grand Central Dispatch
GrandCentral Dispatch(GCD)是一個BSD技術,應用可以用來管理其任務的執行。
GCD與高優化的核組合成一個異步編程模式,來提供方便和更有效的對線程的替代。GCD也為許多低級別的任務提供一個方便的選擇,例如讀和寫文件描述符,實現定時器和監視信號和處理事件。
In-App Purchase(應用內購買)
In-App Purchase 提供在應用中銷售應用特定的內容和服務以及來自iTunes的內容的能力。
這個功能使用StoreKit框架實現,並提供使用用戶的iTunes賬號來處理金融方面的事務需要的基礎。
應用處理全部用戶體驗和供購買的內容及可獲得服務的呈現。作為可下載的內容,你能把可下載的內容放到你自己的服務器或使用蘋果的服務器。
SQLite
SQLite庫讓你在你的應用中嵌入一個輕量級的sql數據庫,而不需要運行一個分離的遠程數據庫服務進程。從你的應用,你能創建本地數據庫文件,管理數據庫表和表中的數據記錄。
SQLite庫為通用功能使用設計,但已經被優化來提供對數據記錄更快速的存取。
XML Support
Foundation框架提供一個NSXMLParser類用來從一個xml文檔中引出元素。
操作xml內容的額外的支持由libxml2庫提供支持。libxml2開源庫讓你快速地分析或寫任意的xml數據和轉換xml內容到html.
3.2 Core Services Frameworks(核心服務框架)
Core Services Frameworks包含下面的一些框架。
1)、Accounts Framework(帳戶框架)
Accounts框架 (Accounts.framework)為確定的用戶賬號提供單點登錄模式。
單點登錄通過消除用戶分離的多個賬號需要的多次登錄提示,來增強用戶體驗。它也通過為應用管理賬號認證過程來簡化開發模式。
該框架需要與Social框架配合使用。
2)Address Book Framework(地址本框架)
AddressBook 框架(AddressBook.framework)提供可編程存取用戶的聯系人數據庫的方式。
如果應用使用聯系人信息,你能使用該框架來存取和修改聯系人信息。例如一個聊天應用可以使用該框架來引出可能的聯系人列表,通過聯系人列表來啟動一個會話以及在特定視圖顯示那些聯系人。
重要提示:存取用戶的聯系人數據需要用戶的明確的許可。應用因此必須准備好用戶拒絕存取的情形。應用也鼓勵提供Info.plist鍵來描述需要存取的原因。
3)Ad Support Framework(廣告支持框架)
AdSupport 框架 (AdSupport.framework)提供存取應用用於廣告功能的一個標識。
該框架也提供一個指示用戶是否選擇廣告跟蹤的標志。應用在試圖存取廣告標識前需要度和判斷這個標志。
4)CFNetwork 框架
CFNetwork框架 (CFNetwork.framework)是高性能的使用面向對象對網絡協議進行抽象的一組C-based接口。這些抽象提供對協議棧細節的控制,使它容易使用低級別的構造例如BSDsockets。
你能使用該框架簡化與ftp或http服務器通訊或決定dnshosts的任務。使用CFNetwork 框架,你能:
1、使用BSD sockets。
2、使用SSL或TLS創建安全連接。
3、決定dnshosts。
4、與HTTP服務器、認證HTTP服務器、HTTPS服務器交互。
5、與FTP服務器交互。
6、發布、解決和瀏覽Bonjour服務。
CFNetwork物理和理論上基於BSD sockets。
5)Core Data 框架
CoreData 框架 (CoreData.framework)框架是管理MVC應用中的數據模式的一種技術。
CoreData框架打算在數據模式是高結構化的應用中使用。
代替編程定義數據結構,在xcode中能夠使用圖形工具來建立一個表現你的數據模式的綱要。在運行時,你的數據模式實體的實例通過CoreData框架被創建、管理和獲得。
通過為你的應用管理其數據模式,CoreData大大減少了必須書寫的代碼量。CoreData也提供如下功能:
1、為優化性能在SQLite數據庫中存儲對象數據;
2、一個管理數據表視圖結果的 NSFetchedResultsController類;
3、對基本的文本編輯之外的undo/redo的管理;
4、支持屬性值的校驗;
5、支持傳播改變確保對象之間的關系保持一致性;
6、支持分組、過濾和在內存中優化數據。
如果你開始開發一個新應用或計划對已有應用進行大的更新,應該考慮使用CoreData。
6)Core Foundation 框架
CoreFoundation 框架 (CoreFoundation.framework)是一組C-based接口,為ios應用提供基本的數據管理和服務功能。該框架包括如下支持:
集合數據類型(數組、集合等等);
應用打包Bundles;
字符串管理;
日期和時間管理
原始數據塊管理
Preferences管理;
URL和流操作;
線程
9、端口和socket通訊。
CoreFoundation框架與Foundation框架緊密相關,為相同的基本功能提供Objective-C接口。
當你需要混合使用Foundation對象和Core Foundation類型時,你能利用兩個框架之間存在的“toll-freebridging”。toll-free bridging”意味着你能可交換地在兩個框架的方法和功能中使用一些CoreFoundation和Foundation類型。這個支持對許多數據類型可用,包括集合和字符串數據類型。
每個框架的類和類型描述聲明一個對象是否是toll-freebridged以及在是的情況下來標識它連接到什么對象。
7)Core Location 核心位置框架
CoreLocation 框架 (CoreLocation.framework)為應用提供位置信息。該框架使用板上的GPS、蜂窩、或者Wi-Fi來定位用戶的當前經度和緯度。
你可在你的應用中集成該技術為用戶提供位置信息。例如,你可實現一個基於用戶的當前位置搜索附近餐館、商店或者銀行的應用。CoreLocation框架也提供如下能力:
1) 在包括磁力計的ios設備上存取羅盤信息;
2) 基於地理位置或藍牙beacon進行區域監視;
3) 支持使用蜂窩基站的低耗電的位置監視;
4)與MapKit配合來增強在特定情景下的位置數據的質量,例如開車時。
8)Core Media Framework(核心媒體框架)
CoreMedia 框架(CoreMedia.framework)提供由AV Foundation框架使用的低級別的媒體類型。大多數應用從不需要使用該框架,但少數需要更精確控制音視頻內容創建和呈現的開發者可以使用它。
9)Core Motion Framework (核心運動框架)
CoreMotion 框架 (CoreMotion.framework)提供一組接口來存取設備上可獲得的運動數據。
該框架支持使用一組新的block-based接口來存取原始和加工過的加速度計數據。對於帶有陀螺儀的設備,你也能獲得原始的陀螺儀數據和加工過的反應設備方向和旋轉速度的數據。
你能在游戲或其它使用運動作為輸入或作為增強用戶體驗的方式的應用中使用加速度計和陀螺儀兩種數據。對於帶有計步硬件的設備,你能存取它的數據來跟蹤健康相關的運動。
10)Core Telephony Framework(核心電話框架)
CoreTelephony 框架 (CoreTelephony.framework)提供與蜂窩電話的通話相關的信息交互的接口。
可以使用該框架來獲得用戶的蜂窩服務提供者的信息。對於對蜂窩call事件感興趣的應用例如VoIP應用也能在那些事件出現時被通知。
11)Event Kit 框架
EventKit 框架 (EventKit.framework)提供存取用戶設備上的月歷事件的接口。能夠使用該框架來做如下事情:
1) 獲得用戶月歷上存在的事件和提示;
2)增加事件到用戶月歷;
3)為用戶創建提示和使它們出現在提示應用中;
4)為月歷事件配置提示信號,包括設置提示信號應該什么時候觸發的規則。
重要提示:存取用戶的月歷和提示數據需要用戶的明確許可。應用因此必須准備好用戶拒絕的情形,也鼓勵應用在其Info.plist文件中提供一個描述需要存取原因的鍵。
12)Foundation框架
Foundation框架 (Foundation.framework)提供Core Foundation框架提供的許多功能的Objective-C封裝。該框架提供如下功能的支持:
集合數據類型(數組、集合等等);
應用打包Bundles;
字符串管理;
日期和時間管理
原始數據塊管理
Preferences管理;
URL和流操作;
線程和運行環;
Bonjour;
通訊端口管理;
國際化;
規則表達式匹配;
Cache支持。
13)JavaScript 核心 框架
JavaScriptCore 框架 (JavaScriptCore.framework)為許多標准的JavaScript對象提供Objective-C語言的封裝。使用該框架來執行JavaScript代碼和分析JSON數據。
14)Mobile Core Services (移動核心服務框架)
MobileCore Services 框架(MobileCoreServices.framework)定義在通用類型標識符(UTIs)中使用的低級別類型。
15)Multipeer Connectivity Framework(多方連接框架)
MultipeerConnectivity 框架 (MultipeerConnectivity.framework)支持附近設備的發現,並與那些設備直接通訊(不需要Internet連接)。
使用該框架能夠與附近設備通訊、容易的創建多人會話、支持可靠地傳輸順序和實時數據。
該框架為發現和管理網絡服務提供可編程和UI-based的選項。應用能在ui中集成MCBrowserViewController類來顯示一個發現設備列表讓用戶選擇。另外也能使用MCNearbyServiceBrowser類來可編程的查找和管理對方設備。
16)Newsstand Kit 框架
Newsstand應用為用戶提供了一個閱讀雜志和報紙的中心位置。想通過Newsstand提供雜志和報紙內容的出版商能夠使用NewsstandKit 框架(NewsstandKit.framework)創建它們自己的iOS應用,讓用戶啟動新雜志和報紙新聞的后台下載。在啟動下載后,系統處理下載操作和當內容可獲得時通知應用。
17)Pass Kit 框架
Passbook應用為用戶提供了一個存儲訂貨單、登機卡、入場券和商業折扣卡的位置。代替物理攜帶這些東西,用戶現在能在IOS設備上存儲它們,並和過去一樣的方式使用。
Pass Kit 框架 (PassKit.framework)提供把這些功能集成到你的應用的Objective-C接口。
你能與web接口和文件格式信息組合使用該框架來創建和管理你們公司提供的電子入場券。
電子入場券由你們公司的web service創建並通過email、Safari或定制的應用提交到用戶的設備。電子入場券本身使用特殊的文件格式,在提交之前被加密簽名。文件格式標識關於提供服務的相關信息以及用戶知道是什么服務的信息。
電子入場券也可以包含一個對卡進行校驗的條碼或其它信息,以便它能被兌換或使用。
18)Quick Look 框架
QuickLook 框架(QuickLook.framework)提供了一個預覽應用不直接支持的文件內容的接口。
該框架主要打算用於應用從網絡下載文件或處理來自不知道來源的文件的工作。
在得到文件后,你能使用該框架提供的視圖控制器來直接顯示文件的內容。
19)Safari Services 框架
SafariServices 框架 (SafariServices.framework)提供以可編程的方式增加URLs到用戶的Safari的書簽的支持。
20)Social Framework(社交框架)
Social框架(Social.framework)提供一個簡單的接口來存取用戶的社交媒體賬號。
該框架取代Twitter框架並增加了其它社交賬號,包括Facebook、Sina微博以及其它。
應用能使用該框架提交狀態更新和圖像到用戶賬號。該框架與Accounts框架一起為用戶提供單點登錄並確保存取的用戶賬號是經過准許的。
21)Store Kit 框架
StoreKit 框架 (StoreKit.framework)提供在ios應用中購買內容和服務的支持,也被稱作應用內購買。
例如,你能使用該功能來允許用戶去鎖另外的應用功能。或者如果你是一名游戲開發者,你能使用它來提供另外的游戲級別。在這兩種情況,StoreKit框架處理事務的收入方面事務,包括通過用戶的iTunes賬號處理付費請求,給應用提供關於購買的信息。
Store Kit聚集在事務的金融方面,確保事務正確和安全。你的應用處理事務的其它方面,包括購買接口的呈現和適當內容的下載(去鎖)。
工作的分工讓你能夠控制購買內容的用戶體驗。由你決定你想呈現給用戶什么樣的購買接口和什么時候那樣做,你也決定你的應用最好的提交機制。
22)System Configuration Framework(系統配置框架)
SystemConfiguration 框架(SystemConfiguration.framework)提供可達性接口,你能用它來確定設備的網絡配置,也能使用該框架確定一個Wi-Fi或蜂窩連接是否在用以及一個特定的主機服務器是否能夠存取。
四 Core OS Layer(核心OS層)
CoreOS層包含其它大多數技術建在其之上的低級別的功能。雖然應用不直接使用這些技術,它們被其它框架使用。在需要顯而易見的處理安全或與外設通訊的情形,你也能使用該層提供的框架。
4.1 Core OS包含的框架:
1)Accelerate 加速框架
Accelerate框架 (Accelerate.framework)包含執行數字信號處理、線性代數、圖像處理計算的接口。
使用該框架的優點是它們針對所有的ios設備上存在的硬件配置做了優化,因此你能寫一次代碼確保在所有設備上有效運行。
2)Core Bluetooth Framework(核心藍牙框架)
CoreBluetooth 框架 (CoreBluetooth.framework)允許開發者與藍牙低耗電外設(LE)交互。
使用該框架的Objective-C接口能夠完成如下工作:
1、掃描藍牙外設,連接和斷開發現的藍牙外設;
2、聲明應用的服務,轉換ios 設備成其它藍牙設備的外設;
3、 從IOS設備廣播iBeacon信息;
4、保存你的藍牙連接的狀態,當應用重新啟動時恢復那些連接;
5、藍牙外設可獲得性變化時獲得通知。
3)External Accessory Framework(外部附件框架)
ExternalAccessory 框架(ExternalAccessory.framework)提供與連接到IOS設備的硬件附件通訊的支持。
附件能通過30-pin連接器或使用藍牙無線與IOS設備進行連接。該框架給你提供了獲得關於每一個可獲得的附件信息和啟動通訊會話的方式。然后,你可自由的使用附件支持的命令直接操作附件。
4)Generic Security Services Framework(通用安全服務框架)
GenericSecurity Services 框架 (GSS.framework)給ios應用提供一組標准安全相關的服務。該框架的基本接口規定在IETFRFC2743 andRFC4401。除了提供標准的接口,IOS還包括一些沒有在標准中規定但被許多應用需要的一些管理證書需要的額外東西。
5)Security Framework(安全框架)
除了內建的安全功能,IOS也提供了一個明確的安全框架(Security.framework),你能用它來保證應用管理的數據的安全。
該框架提供管理證書、公有和私有key和信任策略的接口。支持產生加密安全偽隨機碼。它也支持在keychain(保存敏感用戶數據的安全倉庫)中保存證書和加密key。
公共加密庫提供對稱加密、hash認證編碼(HMACs)、數字簽名等額外支持,數字簽名功能本質上與iOS上沒有的OpenSSL庫兼容。
在你創建的多個應用之間共享keychain是可能的。共享使它容易在相同的一套應用之間更平滑的協作。例如,你能使用該功能來共享用戶口令或其它元素,否則可能使每個應用都需要提示用戶。
為了在應用之間共享數據,必須為每個應用的Xcode工程配置適當的權限。
6)System
System級包含kernel環境、驅動以及操作系統級別的unix接口。kernel本身負責操作系統的每一個方面:如虛擬內存管理、線程、文件系統、網絡和互聯通信。在該層的驅動也提供在可獲得的硬件與系統框架之間的接口。為了安全,對kernel和驅動的存取被限制到一組有限的系統框架和應用。
IOS提供一組存取許多操作系統低級別功能的接口。應用通過LibSystem庫存取這些功能。該C based的接口提供如下功能的支持:
1) 多任務(POSIX線程和GCD)
2) 網絡(BSDsockets)
3) 文件系統存取
4) 標准I/O
5) Bonjour和DNS服務
6) 位置信息
7) 內存分配
8) 數學計算
7) 64-Bit Support
IOS原先是為32-bit架構的設備設計的。自iOS 7,開始支持在64-bit進行編譯、鏈接和調試。所有的系統庫和框架是支持64位的,意味着它們能在32-bit和64-bit應用中使用。當以64-bit運行時編譯時,應用可能運行的更快,因為在64-bit模式可以獲得額外的處理器資源。
iOS使用OS X和其它64-bitUNIX系統使用的LP64模式,意味着在這些系統移植時不會碰到太頭疼的事。