ios四個核心部分
1.Cocoa Touch
Cocoa Touch層的關鍵技術。
(1)多任務
iOS SDK 4.0以及以後的SDK構建的程式(且運行在iOS 4.0和以後版本的裝置上),使用者按下Home按鈕的時候程式不會結束;它們會挪到後台運行。UIKit協助實現的多任務支援,讓程式可以平滑切換到後台,或者切換回來。
為了節省電力,大多數程式進入後台後馬上就會被系統暫停。暫停程式還在記憶體裡,但是不執行任何代碼。這樣程式需要重新啟用的時候可以快速恢複,但是同時不浪費任何電力。然而,在如下原因下,程式也可以在後台下運行:
程式可以申請有限的時間完成一些重要的任務。
程式可以聲明支援某種特定的服務,需要周期的後台已耗用時間。
程式可以使用本地通知在指定的時間給使用者發資訊,不管程式是否在運行。
不管你的程式在後台是被暫停還是繼續運行,支援多任務都不需要你做什麼額外的事情。系統會在切換到後台或者切換回來的時候,通知程式。在這個時刻,程式可以直接執行一些重要的任務,例如儲存使用者資料等。
(2)列印
從iOS 4.2開始,UIKit引入了列印支援,允許程式把內容通過無線網路發送給附近的印表機。關於列印,大部分重體力勞動由UIKit承擔。它管理列印介面,和你的程式協作渲染列印的內容,管理印表機裡列印工作的計劃和執行。
程式提交的列印工作會被傳遞給列印系統,它管理真正的列印流程。裝置上所有程式的列印工作會被排成隊列,先入先出的列印。使用者可以從列印中心程式看到列印工作的狀態。所有這些列印細節都由系統自動處理。
注意:僅有支援多任務的裝置才支援無線列印。你的程式可使用 UIPrintInteractionController對象來檢測裝置是否支援無線列印。
(3)資料保護
iOS4.0起引入了資料保護功能,需要處理敏感使用者資料的應用程式可以使用某些裝置 內建的加密功能(某些裝置不支援)。當程式指定某檔案受保護的時候,系統就會把這個檔案用加密的格式儲存起來。鎖定裝置的時候,你的程式和潛在入侵者都無法訪問這些資料。然而,當裝置由使用者解鎖後,會產生一個密鑰讓你的程式訪問檔案。
要實現良好的資料保護,需要仔細考慮如何建立和管理你需要保護的資料。應用程式必須在資料建立時確保資料安全,並適應裝置上鎖與否帶來的檔案可訪問性的變化。
(4)蘋果推通知服務
從iOS 3.0開始,蘋果發布了蘋果推通知服務,這一服務提供了一種機制,即使你的程式已經退出,仍舊可以發送一些新資訊給使用者。使用這種服務,你可以在任何時候,推送文本通知給使用者的裝置,可以包含程式表徵圖作為標識,發出提示聲音。這些訊息提示使用者,應該開啟你的程式接收查看相關的資訊。
從設計的角度看,要讓iOS程式可以發送推通知,需要兩部分的工作。首先,程式必須請求通知的發送,且在送達的時候能夠處理通知數據。然後,你需要提供一個服務端流程去產生這些通知。這一流程發生在你自己的伺服器上,和蘋果的推通知服務一起觸發通知。
(5)本地通知
從iOS 4.0開始,蘋果推出了本地通知,作為推通知機制的補充,應用程式使用這一方法可以在本地建立通知資訊,而不用依賴一個外部的伺服器。運行在背景程式,可以在重要時間發生的時候利用本地通知提醒使用者注意。例如,一個運行在背景導航程式可以利用本地通知,提示使用者該轉彎了。程式還可以預定在未來的某個時刻發送本地通知,這種通知即使程式已經被終止也是可以被發送的。
本地通知的優勢在於它獨立與你的程式。一旦通知被預定,系統就會來管理它的發送。在訊息發送的時候,甚至不需要應用程式還在運行。
(6)手勢辨識器
從iOS 3.2起,引入了手勢辨識器,你可以把它附加到view上,然後用它們檢測通用的手勢,如划過或者捏合。附加手勢辨識器到view後,設定手勢發生時執行什麼操作。手勢辨識器會跟蹤原始的觸摸事件,使用系統預置的演算法判斷目前的手勢。沒有手勢辨識器,你就必須自己做這些計算,很多都相當的複雜。
UIKit包含了UIGestureRecognizer 類,定義了所有手勢辨識器的標準行為。你可以定義自己的定製手勢辨識器子類,或者是使用UIKit提供的手勢辨識器子類來處理如下的標準手勢:
點擊(任何次數)
捏合縮放
平移或者拖動
划過(任何方向)
旋轉(手指分別向相反方向)
長按
(7)檔案分享權限設定支援
檔案分享權限設定支援是從iOS 3.2開始引入的,利用它程式可以把使用者的資料檔案開發給iTunes 9.1以及以後版本。程式一旦聲明支援檔案分享權限設定,那麼它的/Documents目錄下的檔案就會開放給使用者。使用者可以用iTunes放檔案進去,或者取出來。這一特性並不允許你的程式和同一裝置裡面的其他程式共用檔案;那種行為需要用剪貼簿,或者文本互動控制對象(UIDocumentInteractionController)來實現。
要開啟檔案分享權限設定支援,請:
在程式的Info.plist檔案內加入鍵UIFileSharingEnabled,值設定為YES。
把你要共用的檔案放在程式的Documents目錄內。
裝置插到使用者電腦時,iTunes在選定裝置的程式頁下面顯示檔案分享權限設定塊。
使用者可以在案頭上增加和刪除檔案。
支援檔案分享權限設定的程式必須能夠識別放到Documents目錄內的檔案,並正確的處理它們。例如,程式應該用自己的介面顯示新出現的檔案,而不是把這些檔案列在目錄裡,問使用者該如何處理這些檔案。
(8)點對點對戰服務
從iOS 3.0起引入的Game Kit架構提供了基於藍芽的點對點對戰功能。你可以使用點對點連接和附近的裝置建立通訊,是實現很多多人遊戲中需要的特性。雖然這主要是用於遊戲的,但是也可以用於其他類型的程式中。
更多關於如何在程式中使用點對點對戰功能的資訊,參標準系統View Controller
Cocoa Touch層的很多架構提供了用來展現標準系統介面的View Controller。你應該盡量使用這些View Controller,以保持使用者體驗的一致性。任何時候你需要做如下操作的時候,你都應該用對應架構提供的View Controller:
顯示和編輯連絡人資訊 - 使用Address Book UI架構提供的View Controller。
建立和編輯日曆事件 - 使用Event Kit UI架構提供的View Controller。
編寫email或者短訊息 - 使用Message UI架構提供的View Controller。
開啟或者預覽檔案的內容 - 使用UIKit架構裡的UIDocumentInteractionController類。
拍攝一張照片,或者從使用者的照片庫裡面選擇一張照片 - 使用UIKit架構內的UIImagePickerController類。
拍攝一段視頻 - 使用UIKit架構內的UIImagePickerController類。
(9)外部顯示支援
iOS 3.2開始,引入了外部顯示支援,允許一些iOS裝置可以通過支援的纜線串連到外部的顯示器上。串連時,程式可以用對應的螢幕來顯示內容。螢幕的資訊,包括它支援的解析度,都可以用UIKit架構提供的介面訪問。你也可以用這個架構來把程式的視窗串連到一個螢幕,或另外一個螢幕。
(10)Cocoa Touch架構
下面的章節介紹Cocoa Touch層的架構和它們提供的服務。
*Address Book UI架構
Address Book UI架構(AddressBookUI.framework)是一個Objective-C的編程介面,用來顯示建立新連絡人、編輯和選擇已有連絡人的標準系統介面。這個架構讓你可以輕鬆的在程式裡面顯示連絡人資訊,同時確保你的程式使用和其他程式一樣的介面,保持了平台的一致性。
*Event Kit UI架構
從iOS 4.0開始,引入了Event Kit UI架構(EventKitUI.framework)提供了用來顯示和編輯事件的view controller。這個架構基於Event Kit架構提供的事件相關資料結構,參見Event Kit架構。
*Game Kit架構
iOS 3.0引入了Game Kit架構(GameKit.framework)支援在程式中進行點對點的網路通訊。尤其是這個架構支援了點對點的串連和遊戲內的語音通話功能。雖然這些功能主要是用於多人對戰網路遊戲,但是也可以在非遊戲程式中使用。這個架構提供的網路功能是構建在Bonjour之上幾個簡單的類實現的。這些類抽象了很多網路細節,讓沒有網路編程經驗的開發人員也可以輕鬆地在程式中加入網路功能。
*iAd架構
iOS 4.0引入了iAd架構(iAd.framework)支援程式中顯示banner廣告。廣告由標準的view構成,你可以把它們插入到你的使用者介面中,恰當的時候顯示。View本身和蘋果的廣告服務通訊,處理一切載入和展現廣告內容以及響應點擊等工作。
*Map Kit架構
iOS 3.0引入了Map Kit架構(MapKit.framework)提供了一個可以嵌入到程式裡的地圖介面。基於該介面的行為,它提供了可縮放的地圖view,可標記定製的資訊。你可以把它嵌入在程式的view裡面,編程設定地圖的屬性,儲存當前顯示的地圖地區和使用者的位置。你還可以定義定製標記,或者使用標準標記(圖釘標記),突出地圖上的地區,顯示額外的資訊。
從iOS 4.0開始,這個架構加入可拖動標記和定製覆蓋對象的功能。可拖動標記令你可以移動一個已經被放置到地圖上的標記,編程,也可以通過使用者行為。覆蓋對象提供了建立比標記點更複雜的地表徵圖記的能力。你可以使用覆蓋對象在地圖上來放置資訊,例如大眾運輸路線,選區圖,停車地區,天氣資訊(如雷達資料)。
*Message UI架構
iOS 3.0引入了Message UI架構(MessageUI.framewok)提供了編寫和查詢發建箱訊息的能力。編寫支援包含了一個可以在程式中顯示的view controller介面。你可以在介面中填寫你要發送資訊的內容。你可以設定收信人,主題和內容,以及附件。使用者可以選擇資訊的優先順序。選定後,資訊就會在使用者的寄件匣裡面排隊等待發送。
iOS 4.0和以後的系統,這個架構開始支援用來編寫短訊息的view controller。你可以使用這種view controller來建立和編輯短訊息,而不用離開程式。和郵件編寫介面一樣,這個介面讓使用者選擇發送前是否編輯一下。
2.Media
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等。
3.Core Services
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安裝的目標目錄。
4.Core OS
核心服務層為所有應用提供基礎系統服務,即使不直接使用這些服務,也應該瞭解內建在該系統中的技術。
(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安裝的目標目錄。