#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//1.创建一个观察者
// CFRunLoopObserverCreate(<#CFAllocatorRef allocator#>, <#CFOptionFlags activities#>, <#Boolean repeats#>, <#CFIndex order#>, <#CFRunLoopObserverCallBack callout#>, <#CFRunLoopObserverContext *context#>)
/*
第一个参数:用来分配存储空间
第二个参数:要监听runloop的哪个状态
kCFRunLoopEntry = (1UL << 0), 即将启动(进入)的时候
kCFRunLoopBeforeTimers = (1UL << 1), 即将处理timer事件
kCFRunLoopBeforeSources = (1UL << 2), 即将处理source事件
kCFRunLoopBeforeWaiting = (1UL << 5), 即将进入睡眠
kCFRunLoopAfterWaiting = (1UL << 6), runloop被唤醒
kCFRunLoopExit = (1UL << 7), runloop退出
kCFRunLoopAllActivities = 0x0FFFFFFFU
第三个参数:是否要持续监听
第四个参数:优先级 一般总是传0
第五个参数:监听状态
*/
CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
switch (activity) {
case kCFRunLoopEntry:
NSLog(@"即将启动(进入)的时候");
break;
case kCFRunLoopBeforeTimers:
NSLog(@"即将处理timer事件");
break;
case kCFRunLoopBeforeSources:
NSLog(@"即将处理source事件");
break;
case kCFRunLoopBeforeWaiting:
NSLog(@"即将进入睡眠");
break;
case kCFRunLoopAfterWaiting:
NSLog(@"runloop被唤醒");
break;
case kCFRunLoopExit:
NSLog(@"runloop退出");
break;
default:
break;
}
});
//为runloop添加一个监听者,要坚挺的是runloop的哪种运行模式
/*
第一个参数:runloop对象
第二个参数:观察者
第三个参数:runloop的运行模式 kCFRunLoopDefaultMode == NSDefaultRunLoopMode
*/
CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);
//释放对象
CFRelease(observer);
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(test) userInfo:nil repeats:YES];
}
-(void)test
{
NSLog(@"----test----");
}
@end