监听 RunLoop 运行状态

CFRunLoopObserverRef CFRunLoopObserverCreateWithHandler(CFAllocatorRef allocator, CFOptionFlags activities, Boolean repeats, CFIndex order, void (^block) (CFRunLoopObserverRef observer, CFRunLoopActivity activity))

参数:

1.CFAllocatorRef allocator  //默认值 CFAllocatorGetDefault()

2.CFOptionFlags activities  //监听Runloop的什么状态

3.Boolean repeats                 //是否重复YES/NO

4.CFIndex order                     //传0

5.Block回调

RunLoop 状态

typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {

    kCFRunLoopEntry = (1UL << 0),                           //即将进入Runloop

    kCFRunLoopBeforeTimers = (1UL << 1),             //即将执行Timer

    kCFRunLoopBeforeSources = (1UL << 2),          //即将处理Sources

    kCFRunLoopBeforeWaiting = (1UL << 5),           //即将睡眠

    kCFRunLoopAfterWaiting = (1UL << 6),             //将从睡眠中唤醒

    kCFRunLoopExit = (1UL << 7),                           //即将退出

    kCFRunLoopAllActivities = 0x0FFFFFFFU        //所有都监听

};

添加Runloop观察者

void CFRunLoopAddObserver(CFRunLoopRef rl, CFRunLoopObserverRef observer, CFStringRef mode);

1.CFRunLoopRef rl     //监听的runloop  如 CFRunLoopGetCurrent()

2.CFRunLoopObserverRef observer  //观察者

3.CFStringRef mode    //Runloop模式

例子:

CFRunLoopObserverRef oberver = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {

               NSLog(@"%zd",activity);  

    });    

    CFRunLoopAddObserver(CFRunLoopGetCurrent(), oberver, kCFRunLoopDefaultMode);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容