iOS卡顿优化探究学习

1、iOS的CoreAnimation并非只是一些动画API,本质上是控制图层的分解、存储和管理体系。会涉及绘图、效率等问题。

2、CALayer同UIView类似都是一些被层级关系树管理的矩形块,并管理子图层位置,都可以包含图片、文字等内容,并有一些API来做动画。最大的不同是CALayer不能处理用户交互。每个UIView都有对应的layer图层并可以添加更多图层,真正的动画是layer实现,UIView是对其的一个封装。并且是一种抽象类时候对功能的分离。

3、drawRect:如果方法被调用哦,就会为视图分配一个寄宿图,大小等于视图大小*contentScale。会造成cpu资源和内存的浪费。

4、通常将图像处理、屏幕渲染交给GPU处理会更快,但是如果GPU资源占用过高,性能就会开始下降。

5、图层绘制效率影响:

a太多的几何结构

b重绘,主要是重叠的半透明图层

c离屏绘制

d图片过大

6、问题查找:

使用xcode工具

Time Profilter 查看函数耗时时间

CoreAnimation查看离屏渲染、图层混合度,

OpenGL ES Driver  查看GPU占用率

7、优化方案

a禁止在不断变动的图层上面进行光栅化(shouldRasterize),在不变的地方设置为YES,其优点是将一个固定的图层体系折叠成单张图片,并进行缓存,这样就不需要每一帧重新合成。

b避免重绘、例如避免frame的改变

c控制离屏渲染数量

d自动布局会增加cpu开销

d cornerRadius和maskToBounds同时作用时会触发离屏渲染,如果要避免可采用CAShaperLayer画矩形


总之,要在速度与耗能之间进行平衡,GPU和CPU之间平衡


猜你喜欢

转载自blog.csdn.net/zhangbinhn/article/details/78953650