Ios NSTimer更改间隔性能
我的应用程序使用Ios NSTimer更改间隔性能,ios,objective-c,performance,nstimer,Ios,Objective C,Performance,Nstimer,我的应用程序使用NSTimer以固定间隔(亚秒)将自定义SKNode对象添加到SKScene。在某些时候,我希望计时器加速。以下是我的工作(代码简化): 我注意到每次调用speedUp时都有轻微的延迟。我对Objective-C非常陌生,所以不知道如何解决。在一个计时器上使用调度队列是否更有效,还是因为内部队列太快,我无法避免这个问题 我在仪器上运行了时间分析,但没有突出显示这一点-相反,我最重要的方法是addNodeToScene在另一个问题中找到了解决方案: (使用CADisplayLink
NSTimer
以固定间隔(亚秒)将自定义SKNode
对象添加到SKScene
。在某些时候,我希望计时器加速。以下是我的工作(代码简化):
我注意到每次调用speedUp
时都有轻微的延迟。我对Objective-C非常陌生,所以不知道如何解决。在一个计时器上使用调度队列是否更有效,还是因为内部队列太快,我无法避免这个问题
我在仪器上运行了时间分析,但没有突出显示这一点-相反,我最重要的方法是
addNodeToScene
在另一个问题中找到了解决方案:
(使用
CADisplayLink
而不是NSTimer
)我猜您在-addNodeToScene
的正常工作之外调用了-speedUp
。如果是这样的话,延迟可能是由于您已经用完了前一个延迟的一部分,然后-speedUp
会使旧计时器无效并创建一个新计时器,从而重新开始延迟。任何时候你都会看到一个延迟,超过前一个计时器的10%
我将尝试一些ASCII艺术来说明+
是计时器触发,*
是当您调用-speedUp
时,它会重置计时器
+---------+--------+---------+---------+---------+
+---------+---*--------+--------+--------+--------+
这可能是一些延迟的原因,但是
CADisplayLink
与屏幕刷新率有关。我怀疑它是否能很好地适用于您所描述的情况,即您正在逐步缩小计时器间隔。
+---------+--------+---------+---------+---------+
+---------+---*--------+--------+--------+--------+