iOS系统中RunLoop每秒循环多少次?是否与60次/秒的屏幕刷新率一致?
iOS RunLoop 循环频率问题解答
- RunLoop本身没有固定的每秒循环次数
它是事件驱动的休眠/唤醒机制:没有待处理事件时会立刻进入休眠,不会做无意义的空循环;只有当触摸事件、定时器回调、网络回调、系统通知等事件触发时,才会被唤醒处理事件,处理完成后再次回到休眠状态。所以空闲状态下RunLoop可能每秒循环0次,事件密集时每秒循环次数可以远高于60次。 - RunLoop的循环频率和屏幕刷新率没有绑定关系
大家常碰到的和屏幕刷新率对齐的是CADisplayLink的回调,这只是RunLoop需要处理的众多事件中的一种。常规iOS设备屏幕刷新率为60Hz,支持ProMotion的机型最高可达120Hz,CADisplayLink的回调会和屏幕刷新信号同步触发,但这并不代表RunLoop本身的循环次数和刷新率一致。
实际开发中很容易验证这个结论:你可以给主线程RunLoop添加一个观察者监听循环完成事件,在快速滑动列表时统计每秒的触发次数,会得到远高于当前屏幕刷新率的数值,因为滑动过程中除了每帧渲染的回调外,还有大量触摸事件、UI布局计算等逻辑会触发RunLoop循环。
内容的提问来源于stack exchange,提问作者emmm
相关产品推荐
相关产品推荐

