iOS 卡顿 浅析

卡顿

1、监控卡顿的原理

解主线程的卡顿,首先要能够看懂卡顿的堆栈回溯,这里需要了解一下runtime里的消息发送的流程runloop的流程,以及自动释放池的一些函数调用。

另外就是要理解bugly是如何监控卡顿的,这样子才能知道如何去修复卡顿的问题

iOS 卡顿 浅析_第1张图片

这就是很多 SDK会采用的主线程卡顿监控的原理了,只是在 execssiveHandler去抓堆栈的具体实现上,可能会有一些不同。PLC则是通过暂停先主线程,然后读取寄存器状态,之后再恢复的方法来实现抓取线程堆栈信息的。不过据说这种策略耗时比较大?

2、避免主线程卡顿的通用策略

1、不要在主线程做耗时操作,比如解析数据,高度计算,解压缩文件和IO操作;

2、耗时的计算结果,应该缓存起来,比如cell的高度;

3、尽量少的用同步操作,一定避免死锁;

4、能在子线程做的事情,就不要在主线程去做,比如统计打点;

5、大对象的销毁,可以在子线程去做,参考YYCache;

6、代码逻辑是否合理,比如我们项目中视频回放处的数据过滤,过滤的大班而不是小班数据;

7、对于TableView这样的列表,为了提高滑动时的帧率,其cell的层级和数量,应该尽可能的少,离屏渲染一定要控制住,另外就是手动计算frame要比autolayout的性能好的多。

不同布局方式的性能差异见这里 https://lpd-ios.github.io/2017/04/05/FlexBox-Weex/ 和 https://draveness.me/layout-performance 。

参考
http://www.zoomfeng.com/blog/crash-anr.html
ARC对self的内存管理

你可能感兴趣的:(iOS 卡顿 浅析)