iOS是從MacOS衍生出來的專門未為移動設備(iphone)推出的操作系統。
iOS和Mac OS的UI觀念有很大差別,iOS主要支持手勢操作,包括多觸點技術等等。
從開發人員觀點看,iOS和macos相比,對普通開發人員多加了不少限制。
兩者的框架有一定的差異:
框架差異
雖然iOS的大多數框架同樣存在於 Mac OS X系統,但不同平台框架具有不同的實現方式和使用方式。下面收集了一些Mac OS X 開發者開發iOS應用程序需要注意的重要差別:
UIKit 與 AppKit 的對比
在 iOS系統中,創建圖形應用程序、管理事件循環以及執行其他界面相關的任務都離不開UIKit提供的基礎結構。UIKit和AppKit具有非常顯著的區 別,在設計iOS應用程序的時候,應該特別注意這一點。也正是因為這個原因,在將Cocoa應用程序遷移到iOS系統的時候,您必須提供和界面相關的類和 邏輯。表6-1列出了框架之間的特定的差異,它可幫助您理解iOS中的應用程序應該具有什么特征:
表 6-1 界面技術的差異
差異
討論
文檔支持
在iOS系統中,文檔角色的重要性有所降低,簡單內容模型則變的越來越重要。因為iOS系統的應用程序通常只擁有一個窗口(在不連接外部顯示的情況下), 主窗口是創建及編輯所有應用程序內容的唯一環境。更重要的是,所有和文檔相關的操作,包括文件的創建和管理,現在都由應用程序在幕后完成,不再需要用戶干 預。
視圖類
UIKit為您提供一組非常有針對性的視圖和控件。AppKit框架有許多視圖和控件無法在iOS設備上工作,其他一些視圖則被更具iOS特色的視圖替 代。例如,在顯示分層信息的時候,iOS不使用 NSBrowser類,而是使用完全不同的樣式(導航控制器)。如需了解iOS中的視圖和控件及其使用方式,請查看iPhone人機接口准則。
視圖座標系統
iOS系統Quartz和UIKit內容的繪畫模型和Mac OS X的基本相同,只有一處例外。在 Mac OS X繪畫模型坐標系統中,窗口和視圖的原點默認位於左下角,坐標軸向上向右延伸。但在iOS系統中,默認的原點位置是左上角,坐標軸向下向右延伸。Mac OS X的座標系統稱為“被翻轉”的座標系統,iOS則是缺省座標系統。如需進一步了解圖形和座標系統,請查看iOS視圖編程指南。
窗口即視圖
從概念上來看,iOS系統的窗口和視圖Mac OS X的具有相同含義。但從實現的角度來看,區別很大。在Mac OS X系統中,NSWindow類是NSResponder類的子類,但在iOS系統中,UIWindow實際是UIView的子類。繼承關系上的改變表明窗 口將會使用Core Animation層來繪制外表。之所以有這樣的改變,主要是為了在操作系統級別支持窗口分層。舉個例子,系統可以在一個獨立的窗口中顯示狀態欄,並讓該 窗口浮動於應用程序窗口之上。
iOS系統和Mac OS X系統另外一個差異和窗口的使用方式相關。Mac OS X應用程序可以用於任意數量的窗口,但大多數iOS應用程序只能有一個窗口。在iOS應用程序中顯示不同屏幕的數據不是通過改變窗口實現,而是通過在應用程序窗口中切換定制視圖來完成。
事件處理
UIKit的事件處理模型和Mac OS X的事件處理模型區別很大。UIKit框架不向視圖發送鼠標和鍵盤事件,而是發送觸摸和移動事件。這些事件不但要求您實現一組不同的方法,同時也要求您修 改整個事件處理代碼。舉個例子,本地跟蹤循環的排隊事件不能包含觸摸事件,您的代碼也據此做相應調整。如需進一步了解iOS應用程序的事件處理,請參考 iOS事件處理指南。
目標-動作模型
UIKit支持三種形式的動作,AppKit僅支持一種。UIKit的控件可以在不同的交互階段調用喚醒不同動作,而且一個交互過程可以指定多個目標。因 此,在UIKit中,一個控件可以在一次交互過程中向多個目標發送多個不同的動作。如需進一步了解iOS應用程序的目標-動作模型,請查看iOS事件處理 指南。
繪畫及打印支持
為支持UIKit渲染需要,UIKit的繪畫能力經過適當的調節。它支持圖片的加載和顯示、字符串顯示、顏色管理、字體管理以及多個用於渲染矩陣和獲取圖 形上下文的函數。UIKit不包含通用目的的繪圖類,因為iOS系統使用其他方式完成此類功能(即Quartz和OpenGL ES)。
iOS系統部支持打印功能,iOS設備不能連接打印機或其他相關的打印硬件。
如需進一步了解圖形和繪圖方面的信息,請查看iOS視圖編程指南。
文本支持
撰寫電子郵件和記事本是iOS系統提供的主要的文本支持。UIKit類可以讓應用程序顯示並編輯簡單的字符串和稍微復雜點的HMTL內容。
在iOS 3.2及后續系統中,Core Text框架 和UIKit框架提供更加精密的文本處理能力,您可以通過這它們實現更精密的文本編輯及展現視圖,也可通過它們定制視圖提供的輸入方法。如需進一步了解文本支持相關的信息,請查看iOS文本和Web編程指南。
存取方法的使用和屬性對比
UIKit在其類聲明中大量使用屬性。屬性由Mac OS X在10.5版本引入,是AppKit框架大量的類創建出來以后才出現。屬性不是對AppKit框架getter和setter方法的簡單模仿,而是被 UIKit用於簡化類接口。如需了解屬性的使用方式,請查看Objective-C 編程語言中的“屬性聲明”。
控件和單元
UIKit控件不使用單元。單元被Mac OS X作為視圖的輕量級替代物。但是UIKit視圖本身就是非常輕量的對象,因此單元派不上用場。雖然在命名約定上,UITableView類也用到了單元這個詞,但是此處的單元實際上是UITableView的子類。
表視圖
iOS系統的 UITableView 類可以看成是AppKit框架中NSTableView和NSOutlineView的折中物。它結合Appkit框架中者兩個類的特征,更適合在小屏幕 上顯示。 UITableView一次顯示一列數據,而且您將相關的行組合成一個區段。UITableView也可用於顯示並編輯分層列表數據。如需進一步了解 UITableView類,請查看UITableView類參考。
菜單
幾乎所有iOS應用程序的命令集都比類似的Mac OS X應用程序小得多,因此,iOS不支持菜單,通常也用不到菜單。對於需要少數的命令的場合,使用工具欄或者一組按鍵更加合適。對於需要數據菜單的場合,使 用拾取器或導航控制器界面通常更合適,而如需對上下文敏感的菜單,則可其中的菜單項顯示在Edit菜單,用它們替代或補充剪切、復制或者粘貼等命令。
Core Animation 層
在 iOS系統中,所有外表的繪制都由Core Animation層實現。該框架還隱式為許多視圖相關屬性提供的動畫支持。由於這種內建的動畫支持,您就不需要在代碼中顯示使用Core Animation層,只需更改一下視圖的某些屬性即可實現大多數動畫。只有當需要對分層進行精確控制或者不想將某些特征暴露於視圖層,您才需要直接使用 Core Animation。如需了解將Core Animation層整合到iOS繪圖模型的方式,請查看iOS視圖編程指南。
如需了解UIKit的類信息,請查看UIKit框架參考。
表 6-2 iOS的Foundation不具有的技術
技術
注意事項
元數據和預測管理
iOS不支持Spotlight 元數據和搜索預測,因為iOS不支持Spotlight。
分布式對象和端口名稱服務管理
iOS不存在分布式對象技術,但是您可以使用NSPort家族類和端口(及socket)進行交互交互。您也可以使用Core Foundation和CFNetwork框架處理網絡需求。
Cocoa綁定
iOS不支持Cocoa綁定,而是使用經過少量修改的目標-動作模型。因為這種方式可以讓代碼對動作的處理方式有更多的靈活性。
Objective-C垃圾收集
iOS不支持垃圾收集,您必須使用內存管理模型。您需要通過保持對象來宣告對對象的擁有權,並在不需要對象的時候釋放對象。
AppleScript支持
iOS不支持AppleScript。
iOS系統的Foundation框架提供對XML的支持,您可以通過 NSXMLParser 類解析XML文件,其他解析類(包括NSXMLDocument、NSXMLNode)不受支持。除了NSXMLParser之外,您還可以使用 libXML2庫,這是C語言的XML解析接口。
如果需要了解哪些類存在於Mac OS X而不存在於iOS,請查看位於Foundation框架參考中的“Foundation 框架”的類層次圖。
其他框架的改變
表 6-3列出iOS其他框架的關鍵差異。
表 6-3 同時存在於iOS和Mac OS X的框架之間的差異
框架
差異
AddressBook.framework
該框架接口可用於訪問用戶的聯系人信息。雖然名稱相同,但是此框架的iOS版本和Mac OS X版本卻有很大的區別。
在iOS系統中,除了訪問聯系人數據的C接口,您還可以使用Address Book UI框架提供的類展現標准聯系人挑選和編輯界面。
如需進一步的信息,請查看Address Book框架參考。
AudioToolbox.framework
AudioUnit.framework
CoreAudio.framework
在iOS系統中,這些框架支持音頻錄制、播放以及單聲道和多聲道的音頻內容混合,但不支持更高級的音頻處理功能和定制音頻單元插件。不過iOS系統增加了 一個功能,即觸發iOS設備(具有相應硬件)的震動功能。如果需要了解如何使用音頻支持,請查看iOS應用程序編程指南中的多媒體支持 。
CFNetwork.framework
該框架包含Core Foundation Network接口。在iOS系統中,CFNetwork框架是頂層框架,它沒有子框架。該框架的接口大部分保持不變。如需進一步信息,請查看CFNetwork框架參考。
CoreGraphics.framework
該框架包含Quartz接口。在iOS系統中,Core Graphics框架是頂層框架,它沒有子框架。使用Quartz創建路徑、漸變、陰影、圖案、圖像以及位圖的方式和Mac OS X系統完全相同。不過有一些Quartz的功能(包括PostScript支持、圖像來源和去向、Quartz顯示服務支持、Quartz事件服務支持) 不存在於iOS系統。如需進一步信息,請查看Core Graphics框架參考。
OpenGLES.framework
OpenGL ES 是專為嵌入式系統設計的OpenGL版本。如果您是OpenGL開發人員,則應該會很熟悉OpenGL ES接口。不過,OpenGL ES接口還是有幾點較大差別。首先,它是一套更加小巧的接口,僅支持可以在現有圖形硬件有效執行的功能。第二,許多桌面OpenGL可以使用的擴展並不存 在於OpenGL ES。雖然如此,您應該還是能夠執行大多數和桌面OpenGL相同的操作。但如果你是在遷移現有的OpenGL代碼,則可能需要重寫一部分代碼,需要使用 iOS系統的渲染技術(不同於Mac OS X)。如需了解iOS對OpenGL ES的支持,請查看iOS OpenGL ES編程指南。
QuartzCore.framework
該框架包含Core Animation接口。iOS大部分 Core Animation接口和Mac OS X相同。但是iOS系統沒有用於管理布局約束的類,也不支持使用Core Image過濾器。另外,iOS也沒有Core Image和Core Video接口(兩者都包含於Mac OS X版本的QuartzCore框架)。如需進一步信息,請查看Quartz Core框架參考。
Security.framework
該框架包含安全接口。在iOS系統中,該框架通過加解密、偽隨機數生成以及Keychain保護應用程序數據安全。該框架不包含身份驗證或身份驗證接口, 也不支持顯示證書內容。Keychain接口也是Mac OS X版本的簡化。如需了解iOS的安全支持,請查看iOS應用程序編程指南。
SystemConfiguration.framework
該框架包含和網絡相關的接口。在iOS系統中,您可以使用這些接口來決定設備如何與網絡連接,是通過EDGE、GPRS或是通過Wi-Fi。
內存管理
iOS系統不支持垃圾收集,您需要使用內存管理模型保持、釋放或自動釋放對象。
和Macintosh計算機相比, iOS設備內存非常有限。因此,您需調整自動釋放池的使用,避免創建多個自動釋放池對象。另外,請盡可能直接釋放對象,不要自動釋放。如果您在一個緊湊的 循環中分配了很多對象,要么就直接釋放那些對象,要么就在循環代碼中的恰當的位置創建自動釋放池,並在規則的間隔內釋放自動釋放對象。等到循環結束再釋放 可能會導致內存不足的警告或導致應用程序被系統殺死。