美文网首页
iOS GCD 计时器使用

iOS GCD 计时器使用

作者: 哎哟丶我去 | 来源:发表于2018-03-27 11:56 被阅读0次
//用GCD做计时器 精确时间
    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_sync(dispatch_get_main_queue(), ^{
        });
    });

暂停计时器

dispatch_resume(_timer);//恢复计时器,启动也是这个
dispatch_suspend(_timer);//暂时挂起,挂起的时候_timer不能被释放,否则会崩溃
dispatch_source_cancel(_timer);//停止计时器,停止以后就可以释放_timer了

说明一下:
1._timer在挂起以后,之前的计时仍然有效,比如你在计时到0.9秒的时候挂起,再次resume的时候就从0.9开始计算,过了0.1秒以后就会执行handler里的block。
2.dispatch_walltime 表示用精准计时,不跟随系统,不受系统的后台状态影响。
3.dispatch_source_set_event_handler是在子线程执行的,有UI刷新的代码需要调换到dispatch_get_main_queue()里执行。

相关文章

网友评论

      本文标题:iOS GCD 计时器使用

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