2009-11-17 11 views
1

我想只播放一段短时间的声音,比声音文件的持续时间短。因此,在我开始播放的同时,我想排队完成一个能够阻止声音的任务。最有可能是准时:+ timeWithTimeInterval或-performSelector:withObject:afterDelay:

我看到排队的停止方法两种选择:和的NSTimer performSelector:withObject:afterDelay:

有谁知道这两个是最有可能触发时间,或有更高的优先级?以毫秒精度调用并非绝对必要,但0.1秒的精度会很高。


附录:有谁知道在哪里可以找到有关不同计时器和延迟任务优先级的文档?例如,如何将以下排名:

  • 的NSTimer任务
  • performSelector
  • 视图的drawRect的setNeedsDisplay后调用被称为
  • 图层的绘图函数的调用setNeedsDisplay被称为后
  • 其他任何延迟任务

而且,它还将尝试做这在不同的THR是有用的EAD?

回答

2

performSelector:withObject:afterDelay:将创建一个计时器来知道何时启动,所以两种方法应该是平等的(不可靠)。如果您的代码在主线程上执行了昂贵的计算,并且不会将控制权返回到运行循环,或者运行循环必须处理大量事件,则计时器不会按时启动。

0

从我的理解来看,他们应该差不多。但是,弄清楚这一点的最好方法是自己测试一下。运行一堆测试并记录确切的时间,然后看看哪个更接近。

+0

我得到不一致的结果。似乎取决于我在我的runloop中做了什么,然后performSelector被延迟。但是,我也看到了NSTimer的随机延迟。我会继续努力的。 – mahboudz

+0

我的猜测是,你可能在这个问题上过分重视。以后不会有太大问题。 – jtbandes

+0

我不确定你的意思。我想要可靠地阻止声音的原因是,声音播放的时间越长,它为我的游戏玩家提供的线索就越多。能够按时制止这一点非常重要。 – mahboudz

1

有一个NSTimer,但是它的时间间隔要比声音的时间间隔小得多。当你的计时器触发时,在你的声音播放过程中有几次,你会记录自你开始播放以来的时间。当时间超过您设定的限度时,您停止发声。

相关问题