学习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