iOS 离屏渲染
2020-07-07 本文已影响0人
魔杰西
1.离屏渲染的概念
普通app在加载过程中,CPU跟GPU合作不断地将要渲染的内容存储在帧缓存区,屏幕也不断地从帧缓存区获取内容并显示出来,这是我们正常的过程。当GPU在帧缓存区之外额外开辟一个新的缓存区进行渲染操作,这样的方式叫做离屏渲染。
离屏顾名思义就是离开屏幕,因为我们所说的帧缓存区就是当前用于显示的屏幕缓存区,那在这之前如果有一些非得去做而又来不及去做的事情,就要放到屏幕缓冲区之外的缓存区里进行,处理完之后经过叠加等一些列操作再在屏幕缓存区显示,并不是直接从离屏缓存区显示到屏幕上。
2.离屏渲染什么时候会用到
像圆角,阴影,高斯模糊这些操作系统会自动触发离屏渲染,当某些效果会多次出现在屏幕上,我们想要提高效率的时候,就会手动使用离屏渲染来提前将它渲染,讲渲染结果保存在离屏缓存区以达到复用的目的,比如layer.shouldRasterize(光栅化)设置成YES。
3.离屏渲染也存在一些问题
离屏渲染需要开辟额外的存储空间,大量的离屏渲染会造成大的内存压力,从离屏缓存区到帧缓存区也需要时间,会发生掉帧问题。
我们在使用光栅化的时候也不是盲目的:
①如果layer不能被复用,不需要使用;
②如果layer是动态的,频繁修改的,比如动画,cell的复用,开启离屏渲染反而影响效率;
③离屏渲染的缓存内容有时间限制,如果100ms内没有被使用,那么它就会被丢弃,无法进行复用;
④离屏渲染缓存空间也是有限的,通常不能超过屏像素大小的2.5倍,否则就会失效。