GCD Timer

作者: osnail | 来源:发表于2019-05-30 10:09 被阅读0次

倒计时 定时器 timer

-(void)gcdTimeStartTime:(NSInteger)startTime withBlock:(void(^)(NSInteger time))currentTime {
    dispatch_queue_t queue = dispatch_get_main_queue();
    __block dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    __block NSInteger count  = startTime;
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
    dispatch_source_set_event_handler(timer, ^{
        count --;
        currentTime(count);
        if (count == 0) {
           dispatch_source_cancel(timer);
        }
    });
    dispatch_resume(timer);
    
}

循环执行定时器

@property (nonatomic ,strong) dispatch_source_t timer;//  注意:此处应该使用强引用 strong
-------------------------------------------------------------------------------
/**
 gcd 事件函数
 @param sleepTime 每多少秒发生一次
 @param currentTime 当前是第几次
 */
-(void)gcdEventTime:(NSInteger)sleepTime withBlock:(void(^)(NSInteger time))currentTime {
    
    if (self.timer) {
        return;
    }
    
    dispatch_queue_t queue = dispatch_get_main_queue();
    __block dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    __block NSInteger count  = 0;
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, sleepTime * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
    dispatch_source_set_event_handler(timer, ^{
        count ++;
        currentTime(count);
    });
    dispatch_resume(timer);
    self.timer = timer;

}
// 取消定时器
-(void)cancelTimer {
    if (self.timer) {
        dispatch_source_cancel(self.timer);
    }
}

相关文章

  • iOS开发之进阶篇(10)—— Timer

    概述 本文将要讨论以下三种timer: NSTimer (Timer) CADisplayLink GCD 原理 ...

  • MQTT-Client-Framework GCD 使用

    GCDTimer 使用GCD 的 source timer 来完成 timer 做的事情. MQTTCFSocke...

  • 不需要手动释放的IOS定时器

    1.GCD优点:调用 dispatch_source_cancel(timer); 就会将 timer 对象销毁,...

  • GCD timer

    1.GCD提供了一个类似于NSTimer的类:dispatch_source_t 这个类的特点: GCD的time...

  • GCD Timer

    倒计时 定时器 timer 循环执行定时器

  • GCD timer

    推荐使用GCD方式创建timer的原因,GCD是基于内核的,会更加准时,NSTimer和CADisplayLink...

  • 使用GCD来创建Timer

    推荐使用GCD方式创建timer的原因,GCD是基于内核的,会更加准时,NSTimer和CADisplayLink...

  • GCD的timer

    #import "TestViewController.h"@interface TestViewControll...

  • GCD实现timer

    uint64_tinterval =2*NSEC_PER_SEC; //创建一个专门执行timer回调的GCD队列...

  • Swift GCD Timer

    众所周知,NSTimer 因为依赖于RunLoop去执行,而RunLoop本身工作很繁重,不能确保Timer及时执...

网友评论

      本文标题:GCD Timer

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