1. 程式人生 > >IOS 及 Mac 開發的區別

IOS 及 Mac 開發的區別

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