我对编码比较陌生,并想知道是否有一种传统方法可以在循环的每第n次迭代中执行一些代码(在这种情况下,是NSTimer滴答)。
我正在使用CADisplayLink
并且它每秒更新多次,40,50,无论如何。如果我想在每个(例如500个)循环上执行一些代码,是否有标准方法可以执行此操作?我假设我可以将modulo
运算符与integer
放在一起,但新编码器应该知道更好/更规范化的方式吗?
额外的清晰度(虽然我确定这是一件相当常见的事情......):我有一个每秒钟滴答60次的计时器,但我只想每10次迭代做一些事情。我已经知道我可以使用模数和整数来执行此操作,但我想知道是否还有其他约定来处理这样的情况。
提前致谢!
答案 0 :(得分:0)
为正确的时间间隔建立专用计时器。
无论您使用的是NSTimer
还是CADisplayLink
,如果定时器调用时间过长,都可以合并并抵消。如果你有一个需要20帧运行的显示链接,它每秒只会被调用三次(假设刷新间隔是每秒60帧)。如果你有一个定时器设置为每秒运行一次,在一个实例运行时间超过两秒半,它将在下一次迭代中“吃”,并且将在下一次迭代中运行半秒。 / p>
因此,如果您只计算定时器调用,您的计时器可能会失去同步。要在一个间隔上重复执行某些操作,将计时器设置为该间隔是绝对最佳近似值。
像这样的第二个计时器不是性能问题,除非你做很多计时器,在这种情况下你应该在一个计时器上标准化并且为特定时间点安排事件(这仍然与计数不同以前的迭代)。