iOS GCD定时器

简介

项目中有时候会碰到使用定时器的问题,其中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;
}

注意一定要强引用定时器 ,否则定时器执行过代码段后将会被释放,无定时效果。
GCD定时器时间非常精准,最小的定时时间可以达到1纳秒,所以用在非常精确的定时场合。

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