2015-07-30 4 views
0

В моем приложении 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

dispatch_after works как задержка dispatch_async. Вы по-прежнему не контролируете фактическое время исполнения, и вы не можете отменить это после получения dispatch_after.

Хотите узнать, когда уместно использовать dispatch_after?

Индивидуальная серийная очередь: Соблюдайте осторожность при использовании dispatch_after в пользовательской последовательной очереди. Тебе лучше придерживаться главной очереди.

Главная очередь (0): Это хороший выбор для отправки_после; Для этого Xcode имеет хороший шаблон автозаполнения.

Параллельная Очередь: Соблюдайте осторожность при использовании dispatch_after в специализированных параллельных очередях; редко вы это сделаете. Придерживайтесь основной очереди для этих операций.

Пройти This documentation для получения более подробной информации

Смежные вопросы