用RunLoop監(jiān)聽運行循環(huán)


//? ViewController.m

//? 運行循環(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{

}

//千萬不要做耗時操作

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

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容