CFRunLoopObserverRef CFRunLoopObserverCreateWithHandler(CFAllocatorRef allocator, CFOptionFlags activities, Boolean repeats, CFIndex order, void (^block) (CFRunLoopObserverRef observer, CFRunLoopActivity activity))
參數(shù):
1.CFAllocatorRef allocator //默認(rèn)值 CFAllocatorGetDefault()
2.CFOptionFlags activities //監(jiān)聽(tīng)Runloop的什么狀態(tài)
3.Boolean repeats //是否重復(fù)YES/NO
4.CFIndex order //傳0
5.Block回調(diào)
RunLoop 狀態(tài)
typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
kCFRunLoopEntry = (1UL << 0), //即將進(jìn)入Runloop
kCFRunLoopBeforeTimers = (1UL << 1), //即將執(zhí)行Timer
kCFRunLoopBeforeSources = (1UL << 2), //即將處理Sources
kCFRunLoopBeforeWaiting = (1UL << 5), //即將睡眠
kCFRunLoopAfterWaiting = (1UL << 6), //將從睡眠中喚醒
kCFRunLoopExit = (1UL << 7), //即將退出
kCFRunLoopAllActivities = 0x0FFFFFFFU //所有都監(jiān)聽(tīng)
};
添加Runloop觀察者
void CFRunLoopAddObserver(CFRunLoopRef rl, CFRunLoopObserverRef observer, CFStringRef mode);
1.CFRunLoopRef rl //監(jiān)聽(tīng)的runloop 如 CFRunLoopGetCurrent()
2.CFRunLoopObserverRef observer //觀察者
3.CFStringRef mode //Runloop模式
例子:
CFRunLoopObserverRef oberver = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
NSLog(@"%zd",activity);
});
CFRunLoopAddObserver(CFRunLoopGetCurrent(), oberver, kCFRunLoopDefaultMode);