简单监测iOS卡顿的demo

492 查看

前言

本文的demo代码也会更新到github上。

做这个demo思路来源于微信team的:微信iOS卡顿监控系统
主要思路:通过监测Runloop的kCFRunLoopAfterWaiting,用一个子线程去检查,一次循环是否时间太长。
其中主要涉及到了runloop的原理。关于整个原理:深入理解RunLoop讲解的比较仔细。
以下就是runloop大概的运行方式:

其中UI主要集中在__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__(source0);
__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__(source1);之前。
获取kCFRunLoopBeforeSourceskCFRunLoopBeforeWaiting再到kCFRunLoopAfterWaiting的状态就可以知道是否有卡顿的情况。

NSTimer的实现

具体代码如下: