卡顿优化:
首先完成显示信息的过程是:先CPU计算数据,然后交给GPU进行渲染,最后屏幕发出垂直同步信号进行成像,当显示器发出垂直同步信号的时候,GPU还没有渲染完成,所以只能将上一次的数据显示出来,以至于当前计算的帧数据丢失,这样就产生了卡顿,当前计算的帧数据计算好只能等到下一个周期去渲染。
解决卡顿现象的主要思路就是尽可能减少CPU和GPU资源的消耗。
CPU:
1.尽量用轻量级的对象,如不用处理事件的UI控件可以考虑使用CALayer;
2.不要频繁地调用UIView的相关属性,如frame、bounds、transform等;
3.尽量提前计算好布局,在有需要的时候一次性调整对应属性,不要多次修改;
4.Autolayout会比直接设置frame消耗更多的CPU资源;
5.图片的size和UIimageView的size保持一致;
6.控制线程的最大并发数量;
7.耗时操作放入子线程,如文本的尺寸计算、绘制,图片的解码、绘制等;
GPU:
1.尽量避免短时间内大量图片显示;
2.GPU能处理的最大纹理尺寸是4096*4096,超过这个尺寸就会占用CPU资源;
3.尽量减少透视图的数量和层次;
4.减少透明视图,不透明的就设置opaque为YES;
5.尽量避免离屏渲染;
卡顿检测
这里的卡顿检测主要是针对在主线程执行了耗时的操作所造成的,这样可以通过 RunLoop 来检测卡顿:添加 Observer 到主线程 RunLoop 中,通过监听 RunLoop 状态的切换的耗时,达到监控卡顿的目的