CFRunloopObserverRef

(1)CFRunLoopObserverRef是观察者,能够监听RunLoop的状态改变

(2)如何监听

 //创建一个runloop监听者
    CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(),kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {

        switch (activity) {
             case kCFRunLoopEntry:
                 NSLog(@"即将进入runloop");
                 break;
             case kCFRunLoopBeforeTimers:
                 NSLog(@"即将处理timer事件");
                 break;
             case kCFRunLoopBeforeSources:
                 NSLog(@"即将处理source事件");
                 break;
             case kCFRunLoopBeforeWaiting:
                 NSLog(@"即将进入到休眠状态");
                 break;
             case kCFRunLoopAfterWaiting:
                 NSLog(@"被唤醒");
                 break;
             case kCFRunLoopExit:
                 NSLog(@"runloop已经推出");
                 break;
             default:
                 break;
         }
;
    });

    //为runloop添加一个监听者
    /*
     第一个参数:要监听的对象
     第二个参数:CFRunLoopObserverRef 观察者
     第三个参数:哪种运行模式下面的状态
     */
    CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);

    //释放观察者
    CFRelease(observer);

(3)监听的状态

/*
    _wrapRunLoopWithAutoreleasePoolHandler
    activities = 0x1 ----->1
    activities = 0xa0----->160 = 32+128
     */

    //Runloop的自动释放池是什么时候创建和销毁的
    /*
     第一次创建:当runloop开启的时候
     最后一次销毁:kCFRunLoopExit 当runloop退出的时候
     其他:当runloop即将休眠的时候会把之前的自动释放池销毁,然后创建一个新的自动释放池
     */
typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
    kCFRunLoopEntry = (1UL << 0),   //即将进入Runloop
    kCFRunLoopBeforeTimers = (1UL << 1),    //即将处理NSTimer
    kCFRunLoopBeforeSources = (1UL << 2),   //即将处理Sources
    kCFRunLoopBeforeWaiting = (1UL << 5),   //即将进入休眠
    kCFRunLoopAfterWaiting = (1UL << 6),    //刚从休眠中唤醒
    kCFRunLoopExit = (1UL << 7),            //即将退出runloop
    kCFRunLoopAllActivities = 0x0FFFFFFFU   //所有状态改变
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 先贴下 apple doc, 本文基本是对照 doc 的翻译:https://developer.apple.co...
    brownfeng阅读 7,122评论 8 111
  • RunLoop 文章目录 RunLoop简介 1.1 什么是RunLoop? 1.2 RunLoop和线程 1.3...
    May_d8f1阅读 353评论 0 1
  • 1 RunLoop简介 神秘的RunLoop。一个应用开始运行以后放在那里,如果不对它进行任何操作,这个应用就像静...
    Claire_wu阅读 1,899评论 3 30
  • RunLoop的基本了解 **1 . RunLoop字面的意思 : **运行循环 / 跑圈 **2 . 基本作用 ...
    Mario_ZJ阅读 611评论 1 3
  • 如果没有RunLoop main函数中的RunLoop 第14行代码的UIApplicationMain函数内部就...
    JonesCxy阅读 687评论 0 4

友情链接更多精彩内容