在我的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);
我想知道块中的代码何时被调用。它被称为每秒(可能发生它被称为甚至以前的呼叫还没有完成)或者它是在完成前一次呼叫后一秒钟后调用的?
答案 0 :(得分:0)
dispatch_after works
就像延迟dispatch_async
一样。您仍然无法控制实际执行时间,也不能在dispatch_after
返回后取消此操作。
想知道什么时候适合使用dispatch_after?
自定义串行队列:在自定义串行队列上使用dispatch_after时要小心。你最好坚持主队列。
主队列(串行):这是dispatch_after的不错选择; Xcode有一个很好的自动完成模板。
并发队列:在自定义并发队列上使用dispatch_after时要小心;你很难做到这一点。坚持这些操作的主要队列。
浏览This documentation了解详情