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裝置記憶體非常有限。因此,您需調整自動釋放池的使用,避免建立多個自動釋放池對象。另外,請儘可能直接釋放對象,不要自動釋放。如果您在一個緊湊的 迴圈中分配了很多個物件,要麼就直接釋放那些對象,要麼就在迴圈代碼中的恰當的位置建立自動釋放池,並在規則的間隔內釋放自動釋放對象。等到迴圈結束再釋放 可能會導致記憶體不足的警告或導致應用程式被系統殺死。