- (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);
}