美文网首页
【iOS】使用GCD创建定时器

【iOS】使用GCD创建定时器

作者: 雨声不吃鱼 | 来源:发表于2017-01-18 11:35 被阅读0次

GCD中的定时器是靠 Dispatch Source 来实现的

优点

  • 时间准确
  • 可以使用子线程,解决定时间跑在主线程上卡UI问题

执行一次

#define DelayInSeconds 2.0f

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, DelayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    //执行事件
});

重复执行

#define BaseTimerInterval 25.0f

//需要将dispatch_source_t myTimer设置为成员变量,不然会立即释放
@property (nonatomic, strong) dispatch_source_t myTimer;

//间隔是25秒
uint64_t interval = BaseTimerInterval * NSEC_PER_SEC;
        
//创建一个专门执行timer回调的GCD队列
dispatch_queue_t queue = dispatch_queue_create("<队列名称>", 0);
        
//创建Timer
self.myTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
        
//使用dispatch_source_set_timer函数设置timer参数
/**
  * dispatch_source_set_timer(dispatch_source_t source, 
                              dispatch_time_t start,
                              uint64_t interval, 
                              uint64_t leeway);
  * start 计时器起始时间,可以通过dispatch_time创建,如果使用DISPATCH_TIME_NOW,则创建后立即执行
  * interval 计时器间隔时间,可以通过timeInterval * NSEC_PER_SEC来设置,timeInterval为对应的秒数
  * leeway 这个参数告诉系统我们需要计时器触发的精准程度(所以你可以传入60,告诉系统60秒的误差是可接受的)
  */



dispatch_source_set_timer(self.myTimer, dispatch_time(DISPATCH_TIME_NOW, 0), interval, 0);
        
//设置回调
dispatch_source_set_event_handler(self.myTimer, ^() {
    //可以在这里处理一些事情
});
        
//dispatch_source默认是Suspended(暂停)状态,通过dispatch_resume函数开始它
dispatch_resume(self.myTimer);
//销毁定时器
dispatch_source_cancel(self.myTimer);

推荐参考

相关文章

  • tableView或者scrollView滑动时 定时器 不响应

    先写解决办法 1. 2. 使用GCD创建定时器。GCD创建定时器不收Runloop的影响,并且GCD的定时器更精准...

  • GCD进入后台继续运行

    iOS GCD创建标准定时器,进入后台后任可继续定时

  • GCD中的定时器(五)

    一. GCD中定时器的使用方法 创建一个队列 创建一个GCD的定时器 设置定时器的开始时间,间隔时间以及精准度 设...

  • GCD定时器使用

    iOS中的常用定时器分为这几类: NSTimer CADisplayLink GCD定时器 选择GCD定时器原因:...

  • 【iOS】使用GCD创建定时器

    GCD中的定时器是靠 Dispatch Source 来实现的 优点 时间准确 可以使用子线程,解决定时间跑在主线...

  • GCD定时器封装

    前言 iOS开发中,经常需要使用到定时器,使用NSTimer很容易出现内存泄漏,在此简单封装GCD定时器。 1.定...

  • iOS 定时器耗电探究

    iOS开发中的几种定时器 iOS开发中定时器实现方式大致有三种,一种是Timer实现,一种是通过GCD自己创建,另...

  • iOS GCD定时器封装

    iOS 使用定时器,大多数人都会采用GCD方案。其中一个比较重要的原因是 GCD定时器不依赖RunLoop,没有N...

  • iOS DispatchSourceTimer使用的一些心得

    iOS定时器一般来说就三种,NSTimer,CADisplayLink,GCD 而GCD相对来说比精度高,使用方便...

  • 定时器的使用介绍

    iOS中的定时器大致分为这几类: NSTimer CADisplayLink GCD定时器 (一)NSTimer ...

网友评论

      本文标题:【iOS】使用GCD创建定时器

      本文链接:https://www.haomeiwen.com/subject/cfgvbttx.html