Какао - NSTimer initWithFireDate: несколько секунд слишком поздно?

У меня есть простое приложение, которое не делает гораздо больше (на данный момент), чем создать таймер:

     _time = [[NSTimer alloc] initWithFireDate: _nextDate
                                 interval: 0.0f
                                   target: self
                                 selector: @selector(trackTime)
                                 userInfo: nil
                                  repeats: NO];
[[NSRunLoop currentRunLoop] addTimer:_time forMode:NSRunLoopCommonModes];

В функции trackTime я проверил, насколько велика разница между указанной датой увольнения (_nextDate) и фактической датой увольнения:

     NSTimeInterval secondsBetween = [_nextDate timeIntervalSinceDate:[NSDate date]];

Из результатов видно, что функция вызывается на 2–4 секунды слишком поздно.

Это нормально? Нужен ли другой режим запуска? Есть ли что-нибудь еще, что я могу сделать, чтобы получить лучшее время?

1 ответ

NSTimer не гарантирует интервал, потому что он зависит от механизма runloop. Вы можете увидеть подробную информацию о runloop ( https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html)

Может быть, вы можете попробовать dispatch_after из GCD.

Другие вопросы по тегам