runloop 监听( CFRunLoopAddObserver)

 CFRunLoopObserverRef runloop =  CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopBeforeSources, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
        NSLog(@"%lu", activity);
    });
    CFRunLoopAddObserver(CFRunLoopGetCurrent(), runloop, kCFRunLoopDefaultMode);
    
    
//    CFRunLoopObserverRef runloopRef = CFRunLoopObserverCreateWithHandler(<#CFAllocatorRef allocator#>, <#CFOptionFlags activities#>, <#Boolean repeats#>, <#CFIndex order#>, <#^(CFRunLoopObserverRef observer, CFRunLoopActivity activity)block#>)

//


typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
    kCFRunLoopEntry = (1UL << 0),                                               //  : 即将到 runloop
    kCFRunLoopBeforeTimers = (1UL << 1),                                 //   : 即将处理 timer 之前
    kCFRunLoopBeforeSources = (1UL << 2),                              //    : 即将处理 source 之前
    kCFRunLoopBeforeWaiting = (1UL << 5),                              //     : 即将休眠
    kCFRunLoopAfterWaiting = (1UL << 6),                               //       : 休眠之后
    kCFRunLoopExit = (1UL << 7),                                           //        : 退出
    kCFRunLoopAllActivities = 0x0FFFFFFFU                        //         : 所有的活动
};


//    <#CFStringRef mode#>  表示在润loop 的什么状态下监听
//    kCFRunLoopDefaultMode :  默认的模式
//    kCFRunLoopCommonModes :  标记为 NSRunLoopCommonModes 的模式 UITrackingRunLoopMode 和 NSDefaultRunLoopMode 都是标记为 NSRunLoopCommonModes的
    
//    CFRunLoopAddObserver(<#CFRunLoopRef rl#>, <#CFRunLoopObserverRef observer#>, <#CFStringRef mode#>)

你可能感兴趣的:(runloop 监听( CFRunLoopAddObserver))