离屏渲染(Off-Screem Rendering):
渲染发生在当前屏幕之外。将渲染结果临时保存(创建缓冲区),等到要用时再取出(一般需要切换上下文)。创建缓冲区和切换上下文都会影响性能。
Instruments-CoreAnimation-(Color Offscreen-Rendered Yellow)
触发方式:
手动触发:
shouldRasterize(光栅化)
光栅化是将一个layer预先渲染成bitmap,加入缓存,缓存有效时间100ms。光栅化是一种缓存机制,适合于较复杂的、静态的效果。通常会选择关闭shouldRasterize。
Instruments-CoreAnimation-(Color Hits Green and Misses Red)
自动触发:
mask、shadows、edge antialiasing(抗锯齿)、group opacity、drawRect
1.关于mask补充:一般设置cornerRadius属性不会触发离屏渲染,但是我们经常会同时用到masksToBounds属性,这就会触发Off-Screen Rendering。
2.shadows,如果设置了具体的shadowPath,那么就会避开Off-Screen Rendering。如果没有设置,Core Animation会自动去计算,这样就会触发Off-Screen Rendering。
3.drawRect,重写drawRect方法,并且使用了Core Graphics的技术进行绘制(主要由CPU执行)。
拓展:GPU计算能力强于CPU,如果是涉及较多计算的Off-Screen Rendering建议不要使用drawRect。简单的Off-Screen Rendering建议使用drawRect,涉及缓冲区创建和切换上下文较少。
当前屏幕渲染(On-Screen Rendering):
渲染发生在当前用于显示的屏幕缓冲区中。
总结:使用Instruments来检测性能,再选择使用哪种渲染方式。
网友评论