卡顿掉帧:
在判断页面是否流畅时,我们通常会根据帧率是否保持60来判断。屏幕每秒会刷新60次,发出60次VSync 信号来接受视图渲染的结果。若是在信号来到前,渲染还没完成,这一帧的画面就会被丢弃,屏幕画面不发生改变,这时候就产生了掉帧卡顿。
UI优化方向:
画面的显示,需要CPU和GPU共同完成。在一个VSync 信号的时间内,CPU或GPU工作超时,都会造成掉帧。所以优化方向应该由CPU和GPU两方面入手。
CPU资源消耗主要原因:
1、对象创建:
对象的创建会分配内存、调整属性、甚至还有读取文件等操作,比较消耗 CPU 资源。如果可以用轻量的对象代替,对性能有所优化。比如不需要响应触摸事件的UIView用CALayer代替,用CATextLayer代替UILabel。另外,通过 Storyboard 创建视图对象时,其资源消耗会比直接通过代码创建对象要大非常多。
2、对象销毁:
对象的销毁虽然消耗资源不多,但当容器类持有大量对象时,其销毁时的资源消耗就非常明显。如果对象可以放到异步线程去释放,性能会有所优化。
3、布局计算和视图调整:
视图布局的计算是 App 中最为常见的消耗 CPU 资源的地方。尽量提前计算好视图布局、并且对视图布局进行缓存。
在层级较多的界面使用Autolayout也要注意,在iOS12之前,随着视图数量的增长,Autolayout 带来的 CPU 消耗会呈指数级上升。
当视图层次调整时,UIView、CALayer 之间会出现很多方法调用与通知,应该尽量减少调整视图层次、添加和移除视图。