学习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机制.pngCFRunLoopSource
- Source是RunLoop的数据源抽象类(protocol)
- RunLoop定义了2个版本的Source:
- Source0:处理app内部事件,app自己负责管理(触发),如UIEvent,CFSocket。
- Source1:由RunLoop和内核管理,Mach port驱动,CFMachPort,CFMessagePort。
- 如有需要,可从中选择一种实现自己的Source。
- 上一条基本不会发生。
CFRunLoopObserver
CFRunLoopObserver-1.png CFRunLoopObserver-2.pngCFRunLoopMode
- Runloop在同一段时间只能且必须在一种Mode下run
- 更换Mode时,需要停止当前的Loop,开启新Loop
- Mode是app滑动顺畅的关键
- 可以定制自己的Mode
几种模式:
- NSDefaultRunLoopMode: 默认状态,空闲状态
- UITrackingRunLoopMode: 滚动scrollview状态
- UIInitializationRunLoopMode: 私有,app启动时
- NSRunLoopCommonModes: mode集合
网友评论