初始化圖層,處理圖層,打包通過IPC發給渲染引擎,轉化成OpenGL幾何圖形,這些是一個圖層的大致資源開銷。事實上,一次性能夠在屏幕上顯示的最大圖層數量也是有限的。
確切的限制數量取決于iOS設備,圖層類型,圖層內容和屬性等。但是總得說來可以容納上百或上千個,下面我們將演示即使圖層本身并沒有做什么也會遇到的性能問題。
裁切
在對圖層做任何優化之前,你需要確定你不是在創建一些不可見的圖層,圖層在以下幾種情況下是不可見的:
- 圖層在屏幕邊界之外,或是在父圖層邊界之外。
- 完全在一個不透明圖層之后。
- 完全透明
Core Animation非常擅長處理對視覺效果無意義的圖層。但是經常性地,你自己的代碼會比Core Animation更早地想知道一個圖層是否是有用的。理想狀況下,在圖層對象在創建之前就想知道,以避免創建和配置不必要圖層的額外工作。
Core Graphics繪制
當排除掉對屏幕顯示沒有任何貢獻的圖層或者視圖之后,長遠看來,你可能仍然需要減少圖層的數量。例如,如果你正在使用多個UILabel或者UIImageView實例去顯示固定內容,你可以把他們全部替換成一個單獨的視圖,然后用-drawRect:方法繪制出那些復雜的視圖層級。