如何保持NSTimer始终均匀工作

时间:2014-04-20 06:39:35

标签: ios objective-c nstimer

现在我正在创建一个节拍器程序。我使用NSTimer来启动节拍器。当然,Timer反复运行。但我发现在两种情况下计时器工作不正常。

  1. 刚开始使用NSTimer时,前两个节拍有时会过于紧密。之后,节拍均匀。

  2. 当应用程序进入后面时,我通过以下方式继续执行定时器:

    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];

    但有时在进入或退出背景状态时也会出现不均匀的节拍。

  3. 所以我想知道如何保持定时器始终均匀工作,无论它处于什么状态。好!谢谢!

1 个答案:

答案 0 :(得分:1)

当设置在某个时间点火的定时器时,系统隐含地设置一个允许的“余地”,这是计时器内的短暂延迟,可能实际开火。

这是由于“定时器合并” - 一个系统功能 - 它将同时发生大致的事件分组并在同一时间触发它们。原因是减少CPU周期并延长CPU的空闲时间以节省电量。

如果定时器间隔很小(毫秒到秒),这个“余地”在定时器间隔的10%范围内。

您可以使用方法

显式检索和设置当前允许的最大余地值
-tolerance

-setTolerance:

另见:

NSTimer

Timing Accuracy