runloop中的observer监听

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

    [self observer];

} 

- (void)observer

{

    //要监听runloop 的相关情况,只能用c语言,oc没有

    

    

    //01参数:分配存储空间 CFAllocatorRef allocator

    //02参数:要监听的是什么状态

    //03参数:是否要持续监听

    //04参数:优先级相关,传0就可以了

    //05参数:当监听到runloop 状态改变的时候调用该block块


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


        /*

         kCFRunLoopEntry = (1UL << 0),             Runloop启动啦

         kCFRunLoopBeforeTimers = (1UL << 1),      即将处理定时器事件

         kCFRunLoopBeforeSources = (1UL << 2),     即将处理source事件

         kCFRunLoopBeforeWaiting = (1UL << 5),     即将进入休眠

         kCFRunLoopAfterWaiting = (1UL << 6),      休眠被唤醒

         kCFRunLoopExit = (1UL << 7),              runloop退出

         kCFRunLoopAllActivities = 0x0FFFFFFFU     所有的状态
*/ switch (activity) { case kCFRunLoopEntry: NSLog(@" Runloop启动啦"); break; case kCFRunLoopBeforeTimers: NSLog(@" 即将处理定时器事件"); break; case kCFRunLoopBeforeSources: NSLog(@" 即将处理source事件"); break; case kCFRunLoopBeforeWaiting: NSLog(@" 即将进入休眠"); break; case kCFRunLoopAfterWaiting: NSLog(@" 休眠被唤醒"); break; case kCFRunLoopExit: NSLog(@" runloop退出"); break; default: break; } }); //01参数:哪个runloop需要监听 注意这是C语言的东西 //02参数:监听者 //03参数:监听模式(C 的枚举一般以k开头) //把监听加入到runloop中 CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode); }

 

posted @ 2016-08-24 20:47  东爵  阅读(176)  评论(0)    收藏  举报