Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSTimer更改间隔性能_Ios_Objective C_Performance_Nstimer - Fatal编程技术网

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
与屏幕刷新率有关。我怀疑它是否能很好地适用于您所描述的情况,即您正在逐步缩小计时器间隔。
+---------+--------+---------+---------+---------+
+---------+---*--------+--------+--------+--------+