目前业界主流的 iOS 卡顿监控方案有三种:
- Ping 线程方案:子线程周期性向主线程派发任务并设置等待标记,超时未清除即判定为卡顿。实现简单,但精度较低,且会持续唤醒主线程 RunLoop 带来轻微开销。
- FPS 监控方案:基于
CADisplayLink在每次屏幕刷新时回调,统计单位时间帧数计算 FPS。开销极低,但只能反映平均流畅度,无法定位代码行。 - RunLoop 监控方案:通过
CFRunLoopObserver监听主线程 RunLoop 各状态切换,当某状态停留超过阈值即判定卡顿,并立即捕获主线程堆栈。
其中 RunLoop 方案能精准捕获单次阻塞事件并直接对应代码堆栈,是目前生产环境监控的首选。




