CFRunLoopObserverRef 类

作者: 我的梦想之路 | 来源:发表于2016-06-19 23:34 被阅读858次

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

可以监听的时间点有以下几个:


可以监听的时间点
- (void)observer{
    // 创建一个监听者
//    CFRunLoopObserverCreate(<#CFAllocatorRef allocator#>, <#CFOptionFlags activities#>, <#Boolean repeats#>, <#CFIndex order#>, <#CFRunLoopObserverCallBack callout#>, <#CFRunLoopObserverContext *context#>)
    
    // 使用下面这种方法
   /**
    第一个参数:(<#CFAllocatorRef allocator#>)分配存储空间
    第二个参数:(<#CFOptionFlags activities#>)要监听的状态(kCFRunLoopAllActivities)所有的状态
    第三个参数:(<#Boolean repeats#>)是否持续监听
    第四个参数:(<#CFIndex order#>)优先级
    第五个参数:回调
    
    */
   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(@"即将处理 Sources");
                break;
            case kCFRunLoopBeforeWaiting:
                NSLog(@"即将进入休眠");
                break;
            case kCFRunLoopAfterWaiting:
                NSLog(@"从休眠中唤醒loop");
                break;
            case kCFRunLoopExit:
                NSLog(@"即将退出runloop");
                break;
                
            default:
                break;
        }
        
    });
    
    
    // 给runloop添加监听者
    /**
     第一个参数:(<#CFRunLoopRef rl#>)要监听哪个runloop
     第二个参数:(<#CFRunLoopObserverRef observer#>)监听者
     第三个参数:(<#CFStringRef mode#>)要监听runloop在哪种运行模式下的状态
     
     */
    CFRunLoopAddObserver(CFRunLoopGetCurrent(),observer,kCFRunLoopDefaultMode);
    
    /// 这里可以自己写一个NSTimer实验一下
    
    // 释放runloop
    CFRelease(observer);
}
#凡是带有Create,Copy,Retain等字眼的函数,创建出来的对象,都要在最后做一次release操作

晚安,好梦

相关文章

网友评论

    本文标题:CFRunLoopObserverRef 类

    本文链接:https://www.haomeiwen.com/subject/dwibdttx.html