有时我们的app在使用起来会感觉不是很流畅,那么卡顿产生的原因是什么呢?
这里就涉及两部分的操作
CPU
GPU
在CPU和GPU共同努力下将数据加工好,等待下一帧Vsync信号的到来,就将内容显示在屏幕中,也就是说CPU、GPU使用的时间如果在16ms以内,就不会产生卡顿,如果超过了就会产生卡顿,因为其会显示上一帧的数据, 超时产生的数据会在下一帧Vsync信号到来的时候进行显示。
卡顿解决的主要思路
- 尽可能减少CPU、GPU资源消耗
- 60FPS 刷新频率,CPU、GPU加工数据在 16.7ms 以内就不会产生卡顿
解决卡顿的思路就是
减少CPU和GPU的压力。
GPU是负责纹理渲染,那么我就在纹理渲染的时候进行优化
CPU是负责计算、对象销毁等。那么我们就在这方面进行优化
卡顿优化 - CPU
尽量用轻量级的对象, 比如用不到事件处理的地方,可以考虑使用CALayer取代UIView
- CALayer是负责显示内容的,
- UIView是用来负责处理点击事件的,一个UIView之所以能显示内容是因为里面有CALayer
- 如果我们有些地方用不到事件处理就可以考虑使用CALayer
不要频繁地调用UIView的相关属性, 比如frame、bounds、transform等属性,尽量减少不必要的修改
- 因为每次调整这些相关属性,都会涉及重新计算、绘制,尽