美文网首页
iOS定时器使用

iOS定时器使用

作者: _沒看懂 | 来源:发表于2019-02-20 16:57 被阅读0次

GCD方法

///定时器
@property (nonatomic,strong) dispatch_source_t timer;

例如:启动页倒计时

- (void)createTimerWithTime:(NSString *)time{
    
    //设置倒计时时间
    //通过检验发现,方法调用后,timeout会先自动-1,所以如果从15秒开始倒计时timeout应该写16
    //__block 如果修饰指针时,指针相当于弱引用,指针对指向的对象不产生引用计数的影响

    __block int timeout = [time intValue]+1;
    
    //获取全局队列
    dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    //创建一个定时器,并将定时器的任务交给全局队列执行(并行,不会造成主线程阻塞)
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, global);
    
    self.timer = timer;
    
    //设置触发的间隔时间
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);

    WS(weakSelf);
    
    //设置定时器的触发事件
    dispatch_source_set_event_handler(timer, ^{
        
        //1. 每调用一次 时间-1s
        timeout --;
        
        if (timeout <= 0) {
            
            //关闭定时器
            dispatch_source_cancel(timer);
        
            //在主线程中对button进行修改操作
            dispatch_async(dispatch_get_main_queue(), ^{
                
                [weakSelf.timeButton setTitle:@"跳过" forState:UIControlStateNormal];
                
                [weakSelf delayedLoadVC];
            
            });
        }else {
            
            //处于正在倒计时,在主线程中刷新button上的title,时间-1秒
            dispatch_async(dispatch_get_main_queue(), ^{
                
                [weakSelf.timeButton setTitle:[NSString stringWithFormat:@"跳过 %d",timeout] forState:UIControlStateNormal];
            });
        }
        
        
    });
    
    dispatch_resume(timer);
}

关闭定时器

dispatch_source_cancel(self.timer);

相关文章

  • 无标题文章

    iOS NSTimer使用详解-开启、关闭、移除 定时器定时器详解ios定时器关闭定时器NSTimer 1、要使用...

  • GCD定时器封装

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

  • Flutter 网络请求类封装及搜索框实现

    Flutter 中定时器的使用 在 Flutter 中定时器相对 iOS 来说比较好的一点就是定时器事件的执行不会...

  • iOS14开发-Timer

    定时器可以设置按固定周期执行某个操作。iOS 中主要有 3 种定时器,本文先讲解第一种 Timer。 使用 iOS...

  • iOS定时器的添加方式及其与runloop的关系

    定时器是iOS开发中频繁使用的开发技能,存在多种创建方式,可根据实际需求选用;iOS中的定时器大致分为这几类: N...

  • iOS gcdTimer VS NSTimer

    iOS中定时器的使用demo地址:https://github.com/liuxuleidota/LXLGCDTi...

  • iOS进阶-谈谈定时器

    目录 iOS提供定时器API 定时器开发中的坑 一、 iOS提供定时器API 二、定时器开发中的坑 2.1、必须办...

  • iOS 中定时器小记

    1.iOS 中定时器的解决方案? (1).CADisplayLink 使用简单,代码简洁,和屏幕刷帧频率相同,使用...

  • 定时器

    定时器 兼容ios

  • iOS从timer释放问题看内存管理

    在iOS的开发中,如果使用NSTimer做定时器,一定要在合适的时机销毁这个定时器,不然可能导致内存得不到释放。原...

网友评论

      本文标题:iOS定时器使用

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