一个 Runloop 包含了多个 mode
一个 mode 包含了若干个 source0/source1/time/observer
Runloop 启动时只能选择其中一个 model 作为当前 model
Runloop 常用的 Model
1. UIInitializationRunLoopMode:首次启动时执行的 mode,启动后不再使用
2. kRunloopDefaultMode:默认 mode,一般主线程任务都在该 mode 下执行
3. UITrackingRunloopMode:界面追踪 mode,用于滑动触摸时的 mode,保证页面滑动时不受其他 mode 影响。
4. GSEventReceiveRunLoopMode:接收系统内部时间的 mode,用不上
5. NSRunloopCommonModes:
CommonModels
每当 Runloop 进行切换时,都会将 commonModeItem 中的 source0/source1/time/observer 同步到具有 common 标记的 mode 中。
比如:NSTimer 是在 kCFRunLoopDefaultMode 中运行,scrollView 滚动时是在 UITrackingRunloopMode 中运行,所以需要把计时器添加到 commonMode 中