何时启动调度计时器

时间:2015-07-30 14:11:53

标签: ios objective-c grand-central-dispatch dispatch-async

在我的iOS应用程序中,我使用GCD作为在后台线程上执行的计时器。这是我的代码:

dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
double interval = 1.0;
dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, 0);
uint64_t intervalTime = (int64_t)(interval * NSEC_PER_SEC);
dispatch_source_set_timer(timer, startTime, intervalTime, 0);

dispatch_source_set_event_handler(timer, ^{
   // some code
});

// start timer
dispatch_resume(timer);

我想知道块中的代码何时被调用。它被称为每秒(可能发生它被称为甚至以前的呼叫还没有完成)或者它是在完成前一次呼叫后一秒钟后调用的?

1 个答案:

答案 0 :(得分:0)

dispatch_after works就像延迟dispatch_async一样。您仍然无法控制实际执行时间,也不能在dispatch_after返回后取消此操作。

想知道什么时候适合使用dispatch_after?

自定义串行队列:在自定义串行队列上使用dispatch_after时要小心。你最好坚持主队列。

主队列(串行):这是dispatch_after的不错选择; Xcode有一个很好的自动完成模板。

并发队列:在自定义并发队列上使用dispatch_after时要小心;你很难做到这一点。坚持这些操作的主要队列。

浏览This documentation了解详情