// 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
```