//? ViewController.m
//? 運(yùn)行循環(huán)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{
}
//千萬不要做耗時(shí)操作
- (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.
}
// 監(jiān)聽runloop
- (void)addRunloopObserver{
//獲取當(dāng)前runloop
CFRunLoopRef runloop = CFRunLoopGetCurrent();
//定義一個上下文
CFRunLoopObserverContext context = {
0,
(__bridge void *)self,
&CFRetain,
&CFRelease,
NULL
};
//定義一個觀察者? callback回掉函數(shù)
static CFRunLoopObserverRef defaultObserver;
defaultObserver? = CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeWaiting, YES, NSIntegerMax - 999, &CallBack, &context);
//添加當(dāng)前runloop 的觀察者
CFRunLoopAddObserver(runloop, defaultObserver, kCFRunLoopDefaultMode);
//釋放
CFRelease(defaultObserver);
}
//runloop回掉函數(shù)
static void CallBack(){
NSLog(@"lalal");
}
@end
```