scheduledTimerWithTimeInterval有时不会以正确的间隔调用

时间:2014-01-22 10:06:28

标签: ios

我有两个独立的定时器,用于在0.25秒内记录数据,另一个用于在1秒内记录位置详细信息,如下所示

 self.hardBrakingTimer = [NSTimer scheduledTimerWithTimeInterval:0.25
                                                         target:self
                                                       selector:@selector(timerFired:)
                                                       userInfo:nil
                                                        repeats:YES];

self.locationTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 
                                                     target:self 
                                                   selector:@selector(locationTimerFired:) 
                                                   userInfo:nil 
                                                    repeats:YES];

但有时候这些计时器并没有按照给定的时间间隔打电话。

1 个答案:

答案 0 :(得分:1)

您正在默认模式下在运行循环中安排计时器。运行循环基本上是队列,在某个线程上调度任务。计时器的确切执行时间取决于是否已在同一运行循环中执行其他任务。

还有可能,另一个运行循环“在顶部”运行或修改“模式”,以便延迟其他“任务”(例如用户滚动)。您可以在官方文档中阅读有关运行循环和“模式”及其令人惊讶的行为的更多信息:Anatomy of a Run Loop

你也可能无法使用NSTimer获得精确的计时器,因为 - 正如@Cyrille所指出的那样 - iOS和OSX的“计时器合并”功能:{{3} }。但是,您可以使用dispatch lib实现一个非常精确的计时器,请参阅我的代码示例:Timer Coalescing