軟體繪圖 術語繪圖通常在Core Animation的上下文中指代軟體繪圖(意即:不由GPU協助的繪圖)。在iOS中,軟體繪圖通常是由Core Graphics框架完成來完成。但是,在一些必要的情況下,相比Core Animation和OpenGL,Core Graphics要慢了不少。 軟體繪圖不 ...
軟體繪圖
術語繪圖通常在Core Animation的上下文中指代軟體繪圖(意即:不由GPU協助的繪圖)。在iOS中,軟體繪圖通常是由Core Graphics框架完成來完成。但是,在一些必要的情況下,相比Core Animation和OpenGL,Core Graphics要慢了不少。
軟體繪圖不僅效率低,還會消耗可觀的記憶體。CALayer
只需要一些與自己相關的記憶體:只有它的寄宿圖會消耗一定的記憶體空間。即使直接賦給contents
屬性一張圖片,也不需要增加額外的照片存儲大小。如果相同的一張圖片被多個圖層作為contents
屬性,那麼他們將會共用同一塊記憶體,而不是複製記憶體塊。
但是一旦你實現了CALayerDelegate
協議中的-drawLayer:inContext:
方法或者UIView
中的-drawRect:
方法(其實就是前者的包裝方法),圖層就創建了一個繪製上下文,這個上下文需要的大小的記憶體可從這個算式得出:圖層寬圖層高4位元組,寬高的單位均為像素。對於一個在Retina iPad上的全屏圖層來說,這個記憶體量就是 204815264位元組,相當於12MB記憶體,圖層每次重繪的時候都需要重新抹掉記憶體然後重新分配。
軟體繪圖的代價昂貴,除非絕對必要,你應該避免重繪你的視圖。提高繪製性能的秘訣就在於儘量避免去繪製。