Runloop与线程
Runloop 解决了什么问题
线程如果只是“执行完就退出”,无法承载长期事件处理。Runloop 的作用是让线程在有任务时处理任务、没任务时休眠等待,从而降低 CPU 空转。
基本组成
一个 Runloop 主要包含:
Source:输入源(触摸、端口、自定义事件)Timer:定时任务Observer:状态监听Mode:一次循环只在一个 mode 下运行
主线程 Runloop 的意义
主线程依赖 Runloop 处理:
- 触摸事件
- UI 刷新
- 定时器回调
- 网络回调派发
主线程卡顿本质上是 Runloop 在一个周期里被长任务阻塞。
常见实践
- 后台线程需要常驻时,手动启动 Runloop。
- 定时器放错 mode 会出现滚动时不触发。
- 监控卡顿可通过 Runloop 状态切换超时检测实现。
调优建议
- 把耗时任务移出主线程。
- 主线程只做 UI 与轻逻辑。
- 对高频定时器做合并与降频。
总结
Runloop 是 iOS 线程模型的核心抽象。理解它,才能解释线程常驻、事件派发和卡顿监控这些工程问题。