用RunLoop监听运行循环


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

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容