Runloop 简单总结

1.CFRunloop 有5个类

   CFRunLoopRef
   CFRunLoopModeRef
   CFRunLoopSourceRef
   CFRunLoopTimerRef
   CFRunLoopObserverRef

2.Runloop Mode 有三个内容

Timer
Source
Observer

3.一个子线程对应一个Runloop,且子线程的runloop需要手动开启

[[NSRunloop currentRunloop] run];

4.runloop 的mode属性必须有值(timer,source,observer) ,才会执行

    kCFRunLoopDefaultMode //App的默认Mode,通常主线程是在这个Mode下运行
    UITrackingRunLoopMode //界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响
    UIInitializationRunLoopMode // 在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用
    GSEventReceiveRunLoopMode // 接受系统事件的内部 Mode,通常用不到
    kCFRunLoopCommonModes //这是一个占位用的Mode,不是一种真正的Mode

5.CFRunLoopObserver观察者,监听runLoop的状态改变监听的状态如下:

typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) { kCFRunLoopEntry = (1UL << 0), //即将进入
RunloopkCFRunLoopBeforeTimers = (1UL << 1), //即将处理NSTimer 
kCFRunLoopBeforeSources = (1UL << 2), //即将处理Sources 
kCFRunLoopBeforeWaiting = (1UL << 5), //即将进入休眠 
kCFRunLoopAfterWaiting = (1UL << 6), //刚从休眠中唤醒 
kCFRunLoopExit = (1UL << 7), //即将退出runloop 
kCFRunLoopAllActivities = 0x0FFFFFFFU //所有状态改变};

你可能感兴趣的:(Runloop 简单总结)