iOS應用效能調優的25個建議和技巧(二)

語言: CN / TW / HK

theme: vuepress

「這是我參與2022首次更文挑戰的第5天,活動詳情檢視:2022首次更文挑戰」。

初學者效能提升

該部分致力於一些能提高效能的基本改變。但所有開發者都有可能會忽視該部分下的一些建議。

1. 用ARC管理記憶體

ARC(Automatic Reference Counting, 自動引用計數)和iOS5一起釋出,它避免了最常見的也就是經常是由於我們忘記釋放記憶體所造成的記憶體洩露。它自動為你管理retain和release的過程,所以你就不必去手動干預了。

除了幫你避免記憶體洩露,ARC還可以幫你提高效能,它能保證釋放掉不再需要的物件的記憶體。

這裡有一些更多關於ARC的學習資源:

1> Apple’s official documentation

2> Matthijs Hollemans’s Beginning ARC in iOS Tutorial

3> Tony Dahbura’s How To Enable ARC in a Cocos2D 2.X Project

4> If you still aren’t convinced of the benefits of ARC, check out this article on eight myths about ARC to really convince you why you should be using it.

ARC當然不能為你排除所有記憶體洩露的可能性。由於阻塞、retain 週期、管理不完善的CoreFoundation object(還有C結構)或者就是程式碼太爛依然能導致記憶體洩露。一篇介紹ARC不能做到以及我們該怎麼做的文章

2. 在正確的地方使用reuseIdentifier

一個開發中常見的錯誤就是沒有給UITableViewCells, UICollectionViewCells,甚至是UITableViewHeaderFooterViews設定正確的reuseIdentifier。

為了效能最優化,table view用 tableView:cellForRowAtIndexPath: 代理方法為rows分配cells的時候,它的資料應該重用自UITableViewCell。 一個table view維持一個佇列的資料可重用的UITableViewCell物件。

如果不使用reuseIdentifier的話,每顯示一行table view就不得不設定全新的cell。這對效能的影響可是相當大的,尤其會使app的滾動體驗大打折扣。自iOS6起,除了UICollectionView的cells和補充views,你也應該在header和footer views中使用reuseIdentifiers。

3. 儘可能使Views透明

如果你有透明的Views你應該設定它們的opaque屬性為YES。這會使系統用一個最優的方式渲染這些views。這個簡單的屬性在IB或者程式碼裡都可以設定。

Apple的文件對於為圖片設定透明屬性的描述是:(opaque)這個屬性給渲染系統提供了一個如何處理這個view的提示。如果設為YES, 渲染系統就認為這個view是完全不透明的,這使得渲染系統優化一些渲染過程和提高效能。如果設定為NO,渲染系統正常地和其它內容組成這個View。預設值是YES。

在相對比較靜止的畫面中,設定這個屬性不會有太大影響。然而當這個view嵌在scroll view裡邊,或者是一個複雜動畫的一部分,不設定這個屬性的話會在很大程度上影響app的效能。

你可以在模擬器中用Debug-->Color Blended Layers選項來發現哪些view沒有被設定為opaque。目標就是,能設為opaque的就全設為opaque。