学习sunny视频笔记
Why Run Loops?
- 使程序一直运行并接受用户输入
- 决定程序在何时应该处理哪些事件(Event)
- 调用解耦(Message Queue)
- 节省CPU时间
RunLoop in Cocoa
RunLoop in Cocoa-1.png
RunLoop in Cocoa-2.png
RunLoop in Cocoa-3.png
Callouts.png
RunLoop机制.png
CFRunLoopSource
- Source是RunLoop的数据源抽象类(protocol)
- RunLoop定义了2个版本的Source:
- Source0:处理app内部事件,app自己负责管理(触发),如UIEvent,CFSocket。
- Source1:由RunLoop和内核管理,Mach port驱动,CFMachPort,CFMessagePort。
- 如有需要,可从中选择一种实现自己的Source。
- 上一条基本不会发生。
CFRunLoopObserver
CFRunLoopObserver-1.png
CFRunLoopObserver-2.png
CFRunLoopMode
- Runloop在同一段时间只能且必须在一种Mode下run
- 更换Mode时,需要停止当前的Loop,开启新Loop
- Mode是app滑动顺畅的关键
- 可以定制自己的Mode
几种模式:
- NSDefaultRunLoopMode: 默认状态,空闲状态
- UITrackingRunLoopMode: 滚动scrollview状态
- UIInitializationRunLoopMode: 私有,app启动时
- NSRunLoopCommonModes: mode集合
CFRunLoopMode-1.png
CFRunLoopMode-2.png
CFRunLoopMode-3.png
CFRunLoopMode-4.png
CFRunLoopMode-5.png
CFRunLoopMode-6.png
实践
1.png
2.png
3.png
4.png
5.png
6.png