RunLoop简单总结

2019-08-07  本文已影响0人  需要药

一:概念

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集合

上一篇下一篇

猜你喜欢

热点阅读