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时:

第三个状态为128,说明之前的RunLoop被退出了,重新开始了一个新的RunLoop。
加油~
网友评论