Какао - 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.