iOS GCD 计时器使用

//用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()里执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容