避免無關(guān)的圖形和動畫
如果你的應(yīng)用程序只使用標(biāo)準(zhǔn)的窗口和控件雌桑,你可能不需要太擔(dān)心無關(guān)的內(nèi)容更新她紫,因為系統(tǒng)api是為了最大限度地提高能效而設(shè)計的。但是邑蒋,如果有自定義窗口和控件奕污,請確保圖形代碼的執(zhí)行效率高萎羔。您的應(yīng)用程序不應(yīng)該不必要地刷新內(nèi)容,例如在屏幕上的模糊區(qū)域碳默,或通過過度使用動畫贾陷。
每次你的應(yīng)用程序更新(或“繪制”)屏幕內(nèi)容時,它都需要CPU嘱根、GPU和屏幕處于活動狀態(tài)髓废。無關(guān)或低效的繪圖可以將系統(tǒng)資源從低功耗狀態(tài)中拉出來,或阻止它們完全斷電该抒,從而導(dǎo)致大量的能源使用慌洪。
按照以下指導(dǎo)原則優(yōu)化內(nèi)容刷新
- 減少應(yīng)用程序使用的視圖數(shù)。
- 減少不透明度的使用凑保,例如在顯示半透明模糊的視圖中冈爹。如果需要使用不透明度,請避免在經(jīng)常更改的內(nèi)容上使用它欧引。否則频伤,能量成本將被放大,因為無論何時內(nèi)容更改维咸,背景視圖和半透明視圖都必須更新剂买。
- 當(dāng)應(yīng)用程序或其內(nèi)容不可見時(例如當(dāng)應(yīng)用程序的內(nèi)容被其他視圖、剪輯或屏幕外遮擋時)癌蓖,請刪除繪圖瞬哼。
- 盡可能對動畫使用較低的幀速率。例如租副,在游戲過程中坐慰,高幀速率可能是有意義的,但是較低的幀速率對于菜單屏幕來說就足夠了用僧。僅當(dāng)用戶體驗需要時才使用高幀速率结胀。
- 執(zhí)行動畫時使用一致的幀速率。例如责循,如果應(yīng)用程序每秒顯示60幀糟港,則在動畫的整個生命周期中保持該幀速率。
- 避免在屏幕上同時使用多個幀速率院仿。例如秸抚,游戲中沒有角色以每秒60幀的速度移動速和,而天空中的云以每秒30幀的速度移動。對兩者使用相同的幀速率剥汤,即使這意味著要提高其中一個幀速率颠放。
開發(fā)游戲時使用推薦的框架。這些框架經(jīng)過優(yōu)化以提供卓越的性能和最佳的能效:
在二維游戲中使用SpriteKit吭敢。請參閱SpriteKit Programming Guide
和 SpriteKit Framework Reference.
碰凶。
使用SceneKit進(jìn)行休閑3D游戲。請參見 Scene Kit Framework Reference
和場景工具包功能參考鹿驼。
在高度沉浸式的游戲中使用金屬欲低。參見Metal Programming Guide, Metal Framework Reference
和《Metal功能參考》。
注意
有關(guān)實現(xiàn)windows和視圖的指導(dǎo)原則畜晰,請參閱 View Programming Guide for iOS and View Controller Programming Guide for iOS.
播放全屏視頻時限制用戶界面
iOS經(jīng)過優(yōu)化伸头,可以在播放全屏視頻的同時有效地管理資源,從而節(jié)約能源舷蟀。然而,在播放視頻的上方或下方的附加UI層可以通過增加額外的資源(例如GPU)來降低這種優(yōu)化
avplayervewcontroller類提供的標(biāo)準(zhǔn)視頻控件集在媒體播放期間自動隱藏面哼。應(yīng)用程序應(yīng)該避免在全屏視頻上方添加額外的層(甚至是隱藏層)野宜,這是沒有充分理由的。當(dāng)用戶通過點擊等方式請求控件和其他UI元素時魔策,在全屏視頻上顯示控件和其他UI元素是很好的和預(yù)期的行為匈子。但是,當(dāng)用戶不與這些元素交互時闯袒,應(yīng)該刪除這些元素