专注iOS开发的小渣渣

用RunLoop监听运行循环

2017-04-19  本文已影响47人  蜗蜗牛在奔跑

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

```

上一篇 下一篇

猜你喜欢

热点阅读