GCD定时器的实现

作者: zhazha | 来源:发表于2015-07-14 23:35 被阅读11444次

GCD定时器

  • GCD定时器不受RunLoop约束,比NSTimer更加准时

  • 证明,实现GCD定时器

@interface ViewController ()
/** 定时器(这里不用带*,因为dispatch_source_t就是个类,内部已经包含了*) */
@property (nonatomic, strong) dispatch_source_t timer;
@end
    int count = 0;

     // 获得队列
    dispatch_queue_t queue = dispatch_get_main_queue();

    // 创建一个定时器(dispatch_source_t本质还是个OC对象)
    self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);

    // 设置定时器的各种属性(几时开始任务,每隔多长时间执行一次)
    // GCD的时间参数,一般是纳秒(1秒 == 10的9次方纳秒)
    // 何时开始执行第一个任务
    // dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC) 比当前时间晚3秒
    dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC));
    uint64_t interval = (uint64_t)(1.0 * NSEC_PER_SEC);
    dispatch_source_set_timer(self.timer, start, interval, 0);

    // 设置回调
    dispatch_source_set_event_handler(self.timer, ^{
        NSLog(@"------------%@", [NSThread currentThread]);
        count++;

        if (count == 4) {
            // 取消定时器
            dispatch_cancel(self.timer);
            self.timer = nil;
        }
    });

    // 启动定时器
    dispatch_resume(self.timer);

相关文章

  • GCD定时器的实现

    GCD定时器 GCD定时器不受RunLoop约束,比NSTimer更加准时 证明,实现GCD定时器

  • gcd 定时器

    GCD定时器的实现

  • GCD创建定时器的记录

    GCD定时器 在我们的平时开发中经常会用到定时器 ,相对于NSTimer实现的定时器,GCD定时器记录的时间相对要...

  • GCD 实现定时器

    NSTimer的定时器方法 About NSTimer GCD中使用dispatch_source_t实现定时器 ...

  • 7.多线程基础(七)GCD加强

    1.GCD串行队列和并发队列 2.GCD延时执行 3.GCD线程组:(的作用) 4.GCD定时器: GCD的实现 ...

  • iOS - GCD中的定时器

    GCD定时器优点:① GCD定时器不受RunLoop约束② 比NSTimer更加准时。 GCD定时器用法敲 dis...

  • GCD定时器

    GCD定时器 GCD定时器不受RunLoop的影响,调用频率比较固定

  • GCD-定时器

    定时器分为三种:1、NSTimer 2、CADisplayLink 3、GCD实现 今天着重学习一下GCD中...

  • GCD定时器使用

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

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

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

网友评论

  • 一舟孤月:博主你好,我现在要做一个退到后台继续执行的timer,怎么做呢?
  • ccme:dispatch_cancel(self.timer); 报错
    帅气影中人:取消定时器是,属性置空
    self.timer = nil
    Auditore:@Auditore 正解
    Auditore:@ccme dispatch_source_cancel(_timer);
  • 坐着窜天猴上天:网上好多这个的,但这个好像不行!这个你看一下有问题吗?
    NSTimeInterval period = 1.0; //设置时间间隔
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), period * NSEC_PER_SEC, 0); //每秒执行
    dispatch_source_set_event_handler(_timer, ^{
    //在这里执行事件
    });
    dispatch_resume(_timer);
    a35b1b265a18:@Zxiao旭 不是不行,是ARC下_timer提前释放了,你可以把_timer写成全局变量,或者在执行代码的block里面调用一下_timer
    dispatch_source_set_event_handler(_timer, ^{
    //在这里执行事件,在这里调用一下_timer
    });
  • Sunshine_Boys:楼主 我用swift 写的竟然不执行回调 怎么回事
    Sunshine_Boys:@小凡凡520 我们项目配置问题,不是代码问题,应该是限制了
    小凡凡520:@noddlesBoys 又解决了吗
  • 从此你不再颠沛流离:问题解决了
    从此你不再颠沛流离:@JHCampo @从此你不再颠沛流离 我是放在will disappear 中取消的
    Simba_LX:@JHCampo 同问
    1548fc6e7c42:@从此你不再颠沛流离 你好,你是怎么解决的?
    我现在在UITableViewCell 里面加了个定时器 现在想在cell划出屏幕的时候取消定时器。
  • 从此你不再颠沛流离:怎么在界面消失的时候取消定时器呢
  • shLuckySeven:简主你好,问个问题,我现在要做一个退到后台继续执行的timer,怎么做呢?
    piaoxu:@书桓 怎么搞定的,兄弟
    shLuckySeven:@StevePaul 😂我不信,已经搞定了
    JoanIve:@书桓 退到后台程序有五秒的时间,你可以延迟在后台执行十分钟,如果再长的话,苹果就不允许了,除非使用苹果公开的音乐定位蓝牙功能

本文标题:GCD定时器的实现

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