iOS 定时器

NSTimer


// 创建定时器

NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(test) userInfo:nil repeats:YES];

// 将定时器添加到runloop中,否则定时器不会启动

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

// 停止定时器

[timer invalidate];

CADisplayLink


// 创建displayLink

CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(test:)];

// 将创建的displaylink添加到runloop中,否则定时器不会执行

[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

// 停止定时器

[displayLink invalidate];

displayLink = nil;

GCD定时器

  • 一次性定时

dispatch_time_t timer = dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC);

dispatch_after(timer, dispatch_get_main_queue(), ^(void){

NSLog(@"GCD-----%@",[NSThread currentThread]);

});

  • 重复执行的定时器
{
//@property (nonatomic ,strong)dispatch_source_t timer;//  注意:此处应该使用强引用 strong

//0.创建队列

dispatch_queue_t queue = dispatch_get_main_queue();

//1.创建GCD中的定时器

/*

第一个参数:创建source的类型 DISPATCH_SOURCE_TYPE_TIMER:定时器

第二个参数:0

第三个参数:0

第四个参数:队列

*/

dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);

//2.设置时间等

/*

第一个参数:定时器对象

第二个参数:DISPATCH_TIME_NOW 表示从现在开始计时

第三个参数:间隔时间 GCD里面的时间最小单位为 纳秒

第四个参数:精准度(表示允许的误差,0表示绝对精准)

*/

dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);

//3.要调用的任务

dispatch_source_set_event_handler(timer, ^{

NSLog(@"GCD-----%@",[NSThread currentThread]);

});

//4.开始执行

dispatch_resume(timer);

//

self.timer = timer;

}

你可能感兴趣的:(iOS 定时器)