RunLoop简单总结
一:概念
1>.与thread一一对应
2>.event在特定mode下执行
3>.mode由CFRunLoopTimer,CFRunLoopSource,CFRunLoopObserve类型构成
4>.source是runloop的数据源的抽象类(protocol)
4.1 source0:处理app内内部事件,app自己负责管理(触发)如: UIEvent,CFSocket
4.2 source1:由RunLoop和内核管理,Mach port驱动,如:CFMachPort,CFMessagePort
如有需要可从中选择一种来实现自己的source
5>.比较重要CFRunLoopObserver:向外部报告RunLoop当前的状态更改(通过代理):框架中很多机制都用RunLoopObserver触发:如CAAnimation
6>.RunLoopObserver与Autorelease Pool
uikit通过RunLoopObserver在RunLoop两次Sleep间对AutoreleasePool进行Pop和Push,将这次Loop中产生的autorelease对象释放
二:CFRunLoopMode
1>.RunLoop在同一时段只能且必须在一种特定mode下run
2>.更换mode时,需要停止当前Loop,然后重启新loop
3>.mode是iOS App滑动流畅的原因
3.1:mode类型
UIInitializationRunLoopMode:私有,app启动时
NSDefaultRunLoopMode:默认状态,空闲状态
UITrackingRunLoopMode:滑动状态
NSRunLoopCommonModes:mode集合