iOS 计时器 dispatch_source

作者: rockyMJ | 来源:发表于2017-04-05 17:48 被阅读2347次

    优点:

    *时间准确

    *可以使用子线程,解决定时间跑在主线程上卡UI问题
    一:需要将dispatch_source_t 设置为成员变量,不然会立即释放

    @implementation ViewController
    {
        
        dispatch_source_t _timer;
        
    }
    

    二:创建计时器

    - (void)initTimer {
        dispatch_queue_t queue = dispatch_get_main_queue();
        
        // 创建一个定时器(dispatch_source_t本质还是个OC对象)
        _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
        
        // 设置定时器的各种属性(几时开始任务,每隔多长时间执行一次)
        /**
         何时开始执行第一个任务 (开始计时时间)
         dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC) 比当前时间晚3秒
         */
        dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC));
        uint64_t interval = (uint64_t)(3.0 * NSEC_PER_SEC);
        dispatch_source_set_timer(_timer, start, interval, 0);
        // 设置回调
        dispatch_source_set_event_handler(_timer, ^{
    #warning 是否需要重复计时(默认是重复计时的)
    //        dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                [self timerEnd];
                
            });
        });
        // 启动定时器 -(可以根据自己的需求,调用此方法)
        dispatch_resume(_timer);
    }
    

    三:计时结束

    
    - (void)timerEnd {
        NSLog(@"计时结束-可以开始自己的任务啦");
    }
    

    相关文章

      网友评论

        本文标题:iOS 计时器 dispatch_source

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