IOS 及 Mac 開發的區別

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.