// // ViewController.m // 运行循环RunLoop // // Created by xue on 2017/4/19. // Copyright © 2017年 liangxue. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (nonatomic,strong) NSTimer *timer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES]; // // [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; // _timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES]; [self addRunloopObserver]; // Do any additional setup after loading the view, typically from a nib. } //什么也不干,只是为了让runloop起来 - (void)timerMethod{ } //千万不要做耗时操作 - (void)updateTimer{ static int num = 0; [NSThread sleepForTimeInterval:1.0]; NSLog(@"%@ %d",[NSThread currentThread],num++); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } // 监听runloop - (void)addRunloopObserver{ //获取当前runloop CFRunLoopRef runloop = CFRunLoopGetCurrent(); //定义一个上下文 CFRunLoopObserverContext context = { 0, (__bridge void *)self, &CFRetain, &CFRelease, NULL }; //定义一个观察者 callback回掉函数 static CFRunLoopObserverRef defaultObserver; defaultObserver = CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeWaiting, YES, NSIntegerMax - 999, &CallBack, &context); //添加当前runloop 的观察者 CFRunLoopAddObserver(runloop, defaultObserver, kCFRunLoopDefaultMode); //释放 CFRelease(defaultObserver); } //runloop回掉函数 static void CallBack(){ NSLog(@"lalal"); } @end
网友评论