2018笔记——Runloop状态监听

NSTimer与ScrollView存在一些交互时,需要监听一下Runloop的状态:

//创建一个Observer,观察RunLoop的所有状态

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

    /*

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

     kCFRunLoopBeforeTimers = (1UL << 1), //即将处理NSTimer 2^1 = 2

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

     kCFRunLoopBeforeWaiting = (1UL << 5), //即将进入休眠  2^5 = 32

     kCFRunLoopAfterWaiting = (1UL << 6), //刚从休眠中唤醒  2^6 = 64

     kCFRunLoopExit = (1UL << 7), //即将退出runloop 2^7 = 128

     */

    //这里打印出来的数字是上面数字X的2^X

    NSLog(@"RunLoop状态  %zd", activity);

});

我们滑动table时:

2018笔记——Runloop状态监听_第1张图片
屏幕快照 2018-04-09 上午11.08.13.png

第三个状态为128,说明之前的RunLoop被退出了,重新开始了一个新的RunLoop。

加油~

你可能感兴趣的:(2018笔记——Runloop状态监听)