iPhone開發(fā)須知說明
iPhone開發(fā)須知說明是本文要介紹的內(nèi)容,主要是來認(rèn)識iPhone 開發(fā)需要知道的內(nèi)容,也是我們所說的常識,先來看內(nèi)容。iOS運行環(huán)境的設(shè)計目標(biāo),快速安全的執(zhí)行應(yīng)用程序。
快速啟動,短暫使用。一個典型情況是,用戶從口袋中拿出設(shè)備,只使用幾秒鐘或者幾分鐘,然后再次放在口袋里。 這要求:
快速啟動應(yīng)用。
使用后能盡快退出。
特殊的系統(tǒng)行為。
在很多地方,iOS都和mac os x特性和行為一樣。但是有些情況和mac os x不同:
虛擬內(nèi)存系統(tǒng)
管理程序內(nèi)存,iOS和mac os x擁有相同的特性和行為方式。在iOS下,每個程序仍然擁有自己的虛擬地址空間,但是和mac os x不同的是,它使用虛擬內(nèi)存受到可用物理內(nèi)存數(shù)量的限制。這是因為iOS不能在內(nèi)存滿了以后把可換出的內(nèi)存分頁寫入磁盤。作為替代,當(dāng)應(yīng)用程序需要騰出更大內(nèi)存的時候,虛擬內(nèi)存系統(tǒng)將釋放這些可換出內(nèi)存。這會刪除內(nèi)存中不再使用的部分,也包括只讀內(nèi)容,比如代碼頁。這些頁面能夠經(jīng)常被重新加載到內(nèi)存中,當(dāng)再次需要它們的時候。
如果內(nèi)存繼續(xù)受到限制,系統(tǒng)可能向正在運行的應(yīng)用發(fā)送通知,要求它釋放額外的內(nèi)存。應(yīng)用程序應(yīng)該響應(yīng)這個通知,并且釋放內(nèi)存。
自動休眠定時器
自動休眠定時器,是一個iOS試圖節(jié)約電量的做法。當(dāng)有一段時間沒有收到觸摸事件,系統(tǒng)將初始化屏幕并最終關(guān)閉屏幕。
雖然大部分情況下這種定時處理是好的,但對于游戲開發(fā)者,或者其他不通過觸摸的應(yīng)用開發(fā)者來說,需要保持屏幕可用,這需要對UIApplication的idleTimerDisabled設(shè)置為YES。
這樣的設(shè)置會帶來大量的用電消耗。在開發(fā)中要考慮禁用自動休眠定時器的必要性。
多任務(wù)支持
在iOS4和后續(xù)版本,可以實現(xiàn)后臺執(zhí)行任務(wù)。當(dāng)用戶退出一個應(yīng)用,進(jìn)程并不中止,而是被轉(zhuǎn)入后臺。在轉(zhuǎn)入后臺后很短的時間內(nèi),大部分應(yīng)用將被系統(tǒng)掛起,因此不會運行,也就不會需要附加的電量。另外,需要繼續(xù)運行的應(yīng)用可向系統(tǒng)請求執(zhí)行時間用于運行。
無論是掛起的還是繼續(xù)運行的后臺應(yīng)用,它們都依然在內(nèi)存中,這讓它們重新啟動應(yīng)用花費更少的時間。不過,如果內(nèi)存使用緊張,系統(tǒng)可以釋放后臺應(yīng)用的內(nèi)存,供其他應(yīng)用使用。因此后臺應(yīng)用應(yīng)在轉(zhuǎn)入后臺時持久保存當(dāng)前狀態(tài),以便在下次重啟應(yīng)用的時候恢復(fù)狀態(tài)。
安全
iOS的一個重要任務(wù)是確保用戶在設(shè)備上安全運行應(yīng)用。iOS通過一些特性來保證這些需求。
應(yīng)用沙箱
因為安全的原因,iOS限制一個應(yīng)用只能訪問文件系統(tǒng)的唯一位置,包括限制對數(shù)據(jù)和應(yīng)用首選項(preference)。這就是沙箱特性。沙箱是一組細(xì)粒度的控制限制集合,包括對文件、首選項、網(wǎng)絡(luò)資源、硬件等等的訪問。
文件保護(hù)
在iOS及以后版本,應(yīng)用可以使用文件保護(hù)來加密文件,確保當(dāng)用戶設(shè)備鎖定時文件不可訪問。
keychain data
Keychain Data是一個容器,用于加密和安全的處理密碼和其他保密的信息。keychain data是存儲于應(yīng)用沙箱之外的。如果一個應(yīng)用刪除了,那么keychain data也將自動刪除。當(dāng)用戶通過iTunes備份應(yīng)用數(shù)據(jù)的時候,keychain data也會備份。然而,該數(shù)據(jù)只能恢復(fù)到備份它的設(shè)備上。對應(yīng)用的升級不會影響keychain data。
文件系統(tǒng)
一些重要的應(yīng)用目錄,為了安全的緣故,一個應(yīng)用只能擁有一些目錄,用來寫入應(yīng)用的數(shù)據(jù)或者首選項參數(shù)。當(dāng)一個應(yīng)用安裝到系統(tǒng),會創(chuàng)建該應(yīng)用的home目錄。以下列出一些home目錄下的主要的子目錄:
< Application_Home>/AppName.app:存放應(yīng)用程序自身
< Application_Home>/Documents/:存放用戶文檔和應(yīng)用數(shù)據(jù)文件
< Application_Home>/Library/:應(yīng)用程序規(guī)范的頂級目錄,下面有一些規(guī)范定義的的子目錄,當(dāng)然也可以自定義子目錄,用于存放應(yīng)用的文件,但是不宜存放用戶數(shù)據(jù)文件
< Application_Home>/Library/Preferences,這里存放程序規(guī)范要求的首選項文件
< Application_Home>/Library/Caches,保存應(yīng)用的持久化數(shù)據(jù),用于應(yīng)用升級或者應(yīng)用關(guān)閉后的數(shù)據(jù)保存
< Application_Home>/tmp/,保存應(yīng)用數(shù)據(jù),但不需要持久化的,在應(yīng)用關(guān)閉后,該目錄下的數(shù)據(jù)將刪除
大小寫敏感文件系統(tǒng)
iOS文件系統(tǒng)對大小寫敏感的。
通過用戶桌面電腦共享文件
文件共享可以在應(yīng)用和用戶桌面電腦之間共享文件。但是不允許同一個設(shè)備中的不通應(yīng)用之間共享文件。如果要在應(yīng)用之間共享數(shù)據(jù),需要使用剪切板或者文檔交互控制器對象(document interaction controller object)。
備份和恢復(fù)
iTunes應(yīng)用可在適當(dāng)情況下自動處理備份和恢復(fù)。然后,應(yīng)用需要知道備份和恢復(fù)的文件放在哪里。
什么是備份
你不必為你的應(yīng)用備份和恢復(fù)做任何準(zhǔn)備。在iOS
以后,當(dāng)設(shè)備連接到電腦并開始同步后,iTunes會自動增量備份所有文件,但不包括下面的目錄:
- Application_Home>/AppName.app
- Application_Home>/Library/Caches
- Application_Home>/tmp
雖然iTunes備份應(yīng)用自身,但不是每次同步都這樣做。從app store上購買的應(yīng)用,只在隨后的同步過程中被iTunes備份。再之后,iTunes并不在同步操作中備份應(yīng)用,除非應(yīng)用自身發(fā)生變化,比如應(yīng)用的升級。
為了避免同步過程時間過長,你需要對應(yīng)用中使用的文件放在哪里做出選擇。< Application_Home>/Documents目錄用來存放用戶文檔和應(yīng)用數(shù)據(jù)文件。臨時文件要保存在Application Home/tmp目錄下,這樣可以在不需要時刪除。如果在兩次啟動中都需要的數(shù)據(jù)文件,但是不需要備份的,可放置在Application Home/Library/Caches。比如很大的數(shù)據(jù)文件,盡量放置在Caches目錄下,而不是Documents目錄下,Documents目錄下文件將做備份,這樣會很耗時。
應(yīng)用更新期間的文件保存
如果文件需要在應(yīng)用更新后依然存在,需要放置在:
- Application_Home>/Documents
- Application_Home>/Library
模擬器
模擬器提供了一個運行環(huán)境,和真機(jī)的環(huán)境很接近,但是并不完全一樣:
模擬器沒有真機(jī)上的一些限制,比如內(nèi)存(真機(jī)沒有內(nèi)存分頁保存到硬盤的特性)
有些技術(shù)的行為并不一樣,比如OpenGL ES
判斷可用的硬件支持
有一些硬件特性,不是所有iOS設(shè)備都帶的,比如GPS或者照相機(jī)。如果你的應(yīng)用需要這樣的特性,需要在用戶購買前提醒。如果你使用這樣的硬件特性是可選的,那么需要在使用前檢查硬件特性是否可用。
如果應(yīng)用必須使用硬件特性,那么在Info.plist文件中的UIRequiredDeviceCapabilities條目中做設(shè)置。這也可以防止沒有該硬件特性的用戶安裝應(yīng)用到設(shè)備上。
可通過iOS判斷如下硬件特性的支持情況:
多任務(wù)支持
屏幕是iPad還是iPhone尺寸
是否有額外的屏幕加入
硬件磁盤加密特性是否可用
網(wǎng)絡(luò)是否可用
設(shè)備是否可捕獲視頻
語音輸入(麥克風(fēng))是否可用
GPS設(shè)備當(dāng)前是否可用
指定的硬件訪問是否可用
當(dāng)前的電池水平
proximity傳感器是否可用(是哪個面部靠近識別傳感器吧?)
小結(jié):iPhone開發(fā)須知說明的內(nèi)容介紹完了,通過本文文章介紹iPhone的開發(fā),是不是多多少少明白了點,最后希望本文對你有所幫助!