編寫iOS應用程式有何不同

出版圈郭志敏發表於2012-03-28

如果從未使用過Cocoa或它的前期產品NextSTEP和OpenStep,那麼你可能會發現Cocoa Touch(用於編寫iOS應用程式的應用程式框架)稍顯另類。它與其他常用應用程式框架(如用於構建.NET或Java應用程式的框架)之間存在一些根本差異。你起初可能會有點不知所措,但不必擔心,只要勤加練習,就可以掌握其中的規律。 如果你具備使用Cocoa或NextSTEP程式設計的經驗,就會發現iOS SDK中有許多熟悉的身影。其中的許多類都是從用於Mac OS X開發的版本中原樣借鑑過來的,一些類即便存在不同,也遵循相同的基本原則,並使用與舊版本類似的設計模式。但是,Cocoa和Cocoa Touch之間卻存在一些差異。

無論你的知識背景如何,都需要謹記iOS開發與桌面應用程式開發之間的重要差異。

只有一個應用程式正在執行

在iOS上,特定時間段內僅啟用一個應用程式並在螢幕上顯示。從iOS 4開始,當使用者按下home按鈕後應用程式有時可能繼續在後臺執行,但是這種情況也只限於特定的場合。 當應用程式未啟用或未執行於後臺時,它不會引起CPU任何形式的注意,這將導致網路連線斷開以及其他問題。iOS 4在後臺處理能力方面已經有了大幅提升,但要使你的應用程式在這種情況下仍執行良好,還需要你自身的努力。

只有一個視窗

在桌面及膝上型電腦作業系統中,多個程式可以同時執行,並且可以分別建立和控制多個視窗。而iOS則有所不同,它只允許應用程式操作一個“視窗”。應用程式與使用者的所有互動都在這個視窗中完成,而且這個視窗的大小就是iOS螢幕的大小,是固定的。

受限訪問

計算機上的程式可以訪問其使用者能夠訪問的任何內容,而iOS則嚴格限制了應用程式的訪問許可權。 你只能在iOS為應用程式建立的檔案系統中讀寫檔案。此區域稱為應用程式的沙盒,應用程式在其中儲存文件、首選項等需要儲存的各種資料。 應用程式還存在其他方面的限制。舉例來說,你不能訪問iOS上埠號較小的網路埠,也不能執行臺式計算機中需要有根使用者或管理員許可權才能執行的操作。

有限的響應時間

由於使用方式特殊,iOS及其應用程式需要具備較快的響應時間。啟動應用程式時,需要先開啟它,載入首選項和資料,並儘快在螢幕上顯示主檢視,這一切要在幾秒之內完成。 只要應用程式在執行,就可以從其下方拖出一個選單條。如果使用者按home按鈕,iOS就會返回主頁,使用者需要快速儲存一切內容並退出。如果未在5秒之內儲存並放棄控制,則應用程式程式將終止,無論使用者是否已經完成儲存。

請注意,在iOS 4中,這種情況因為一種新API的存在而有所改善。這種API允許你的應用程式在終止前申請多一些的時間來處理。

有限的螢幕大小

iPhone的螢幕顯示效果非常出色,從推出到現在,它一直是消費裝置中解析度最高的螢幕。

但是,iPhone的顯示螢幕並不大,你施展的空間要比現代計算機小很多,最新的Retina顯示器(iPhone 4和第4代iPod touch)僅有640×960畫素,更老的僅有320×480畫素。

而且,現在的尺寸與以前相同,只不過Retina螢幕為640×960畫素,所以不要以為可以放更多的控制元件或什麼了——僅僅是解析度比以前高了。

iPad稍大一些,是1024×768畫素,但也不算很大。與此形成鮮明對比的是,在撰寫本書時,蘋果公司最便宜的iMac支援1920×1080畫素,最便宜的膝上型電腦MacBook支援1280×800畫素。而蘋果公司最大的顯示器,27英寸的LED Cinema Display,支援超大的2560×1440畫素。

有限的系統資源

閱讀本書的任何資深程式設計師可能都會對256 MB記憶體、8 GB儲存空間的機器嗤之以鼻,因為其資源實在是非常有限,但這種機器卻是真實存在的。或許,開發iOS應用程式與在記憶體為48 KB的機器上編寫複雜的電子表格應用程式不屬於同一級別,二者之間沒有可比性,但由於iOS的圖形屬性和它的功能,其記憶體不足是非常容易出現的。

目前上市的iOS的實體記憶體要麼是256 MB,要麼是512 MB,當然今後記憶體還會不斷增長。記憶體的一部分用於螢幕緩衝和其他一些系統程式。通常,不到一半(也可能更少)的記憶體將留給應用程式使用。

雖然這些記憶體對於這樣的小型計算機可能已經足夠了,但談到iOS的記憶體時還有另一個因素需要考慮:現代計算機作業系統,如Mac OS X,會將一部分未使用的記憶體塊寫到磁碟的交換檔案中。這樣,當應用程式請求的記憶體超過計算機實際可用的記憶體時,它仍然可以執行。但是,iOS並不會將易失性記憶體(如應用程式資料)寫到交換檔案中。因此,應用程式可用的記憶體量將受到手機中未使用的實體記憶體量的限制。

Cocoa Touch提供了一種內建機制,可以將記憶體不足的情況通知給應用程式。出現這種情況時,應用程式必須釋放不需要的記憶體,甚至可能被強制退出。

不支援垃圾收集

之前已經說過,Cocoa Touch使用的是Objective-C 2.0,但該語言中的一個關鍵特性在iOS中並不可用:Cocoa Touch不支援垃圾收集。

新功能

前面提過,Cocoa Touch缺少Cocoa的一些功能,但iOS SDK中也有一些新功能是Cocoa所沒有的,或者至少不是在任何Mac上都可用的。

  • iPhone SDK為應用程式提供了一種定位方法,即用Core Location確定手機的當前地理座標。
  • 大部分iOS還提供了一個內建的照相機和照片庫,並且SDK允許應用程式訪問這兩者。
  • iOS還提供了一個內建的加速計(在最新的iPhone、iPod touch中有陀螺儀),用於檢測機子的握持和移動方式。

與眾不同的方法

iOS沒有鍵盤和滑鼠,這意味著在程式設計時它與使用者的互動方式和通用的計算機截然不同。所幸的是,大多數互動都不需要你來處理。例如,如果在應用程式中新增一個文字欄位,則iOS知道在使用者單擊該欄位時呼叫鍵盤,你不需要編寫任何額外的程式碼。

說明 目前的裝置支援通過藍芽連線外部鍵盤,這提供了一種不錯的鍵盤體驗並節省了一定的螢幕空間,但這種使用情形仍然非常少。連線滑鼠仍然完全行不通。

本文摘自:《iPhone 4與iPad開發基礎教程》

相關文章