1.什么是离屏渲染?
2.离屏渲染会引起什么问题?
3.什么情况下会发生离屏渲染?
1.什么是离屏渲染
离屏渲染是GPU在当前帧缓冲(frame buffer)区之外新开辟了一块内存区,将渲染结果先暂存到此区域内,渲染完成后在写入当前的frame buffer。
2.离屏渲染会引起什么问题?
离屏渲染会降低App的性能,苹果手机屏幕刷新率是每秒60次,每一帧渲染的时间是16.67ms,也就是说在这16.67ms内要完成一帧的渲染,如果完不成就会掉帧,我们看到的屏幕的现象就是卡顿,而离屏渲染需要另外开辟内存,并且GPU会从当前frame buffer切换到offscreen buffer,offscreen buffer渲染结束后再切换回来将结果显示到屏幕上,如果cell上有离屏渲染,那么滑动的时候每一帧都会切换,每秒要切换60次,可想而知内存消耗比正常渲染大多少。
3.什么情况下会发生离屏渲染?
1.设置圆角:这种情况不是必然会发生离屏渲染的,如果单纯的设置UIView的layer.cornerRadius+layer.masksToBounds是不会发生离屏渲染的,UIImageView如果有image,UIButton有背景图时,设置圆角并且图片也需要切圆角时就会发生离屏渲染。
2.设置shadow
3.设置group opacity
4.mask
5.UIBlurEffect
总结:发生离屏渲染是GPU在当前屏幕无法渲染完成,只能另外开辟缓冲区来暂存渲染结果,最后在返回frame buffer 显示。GPU为什么无法在frame buffer 渲染呢?因为GPU渲染类似画家画画,一层一层渲染,先渲染底层,再渲染上层,并且每渲染完一帧,就会把此帧数据删除来减少缓冲区的占用,这样如果渲染完上层后需要修改底层的内容,这时就无法获取数据,就无法完成渲染,所以才需要额外开辟缓冲区来进行组合渲染。