定时器的几种常用用法
2019-04-12 本文已影响0人
coming_168
CADisplayLink定时器
1.创建CADisplayLink定时器:当下一次屏幕刷新(刷帧)的调用(一秒钟刷新60)
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(change)];
2.想要让CADisplayLink工作,必须得要把它添加到主运行循环当中
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
NSTimer定时器
1.创建一个自动执行任务的定时器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction:) userInfo:@"12345" repeats:YES];
2.想要让定时器在拖动其他控件时也不停止,必须要将运行的模式修改为NSRunLoopCommonModes
- NSDefaultRunLoopMode (默认) : 同一时间只能处理一个任务
- NSRunLoopCommonModes:可以分配一定的时间处理其他任务
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
3.定时器停止方法
[timer invalidate];
// self.timer = nil;
CGD方式
// 获取全局子线程队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 创建timer添加到队列中
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
// 设置首次执行事件、执行间隔和精确度
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0.1 * NSEC_PER_SEC);
// 处理事件block
dispatch_source_set_event_handler(timer, ^{
});
// 激活timer
dispatch_resume(timer);
// 取消timer
// dispatch_source_cancel(timer);