导致卡顿问题的几种原因:
-
复杂 UI 、图文混排的绘制量过大;
-
在主线程上做网络同步请求;
-
在主线程做大量的 IO 操作;
-
运算量过大,CPU 持续高占用;
-
死锁和主子线程抢锁。
FPS 是一秒显示的帧数,也就是一秒内画面变化数量。当FPS达到60,说明界面很流程,当FPS低于24,页面流畅度不是那么流畅。
线程的消息 事件是依赖于 NSRunLoop 的,所以从 NSRunLoop 入手,就可以知道主线程上都调用了哪些方 法。我们通过监听 NSRunLoop 的状态,就能够发现调用方法是否执行时间过长,从而判断出是 否会出现卡顿。
RunLoop 这个对象,在 iOS 里由 CFRunLoop 实现。简单来说,RunLoop 是用来监听输入源,进 行调度处理的。这里的输入源可以是输入设备、网络、周期性或者延迟时间、异步回调。
RunLoop 会接收两种类型的输入源:
-
一种是来自另一个线程或者来自不同应用的异步消息;
-
另一 种是来自预订时间或者重复间隔的同步事件。