1

我只想在很短的时间内播放声音,比声音文件的持续时间短。因此,在我开始播放的同时,我想排队一个会停止声音的任务。

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

有谁知道这两者中哪一个最有可能按时触发,或者具有更高的优先级?以毫秒精度调用我并不是必须的,但精确到 0.1 秒会很棒。


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

  • NSTimer 任务
  • 执行选择器
  • 在调用 setNeedsDisplay 之后调用视图的 drawRect
  • 调用 setNeedsDisplay 后调用图层的绘图例程
  • 任何其他延迟的任务

尝试在不同的线程中执行此操作是否有用?

4

3 回答 3

2

performSelector:withObject:afterDelay:将创建一个计时器来知道何时触发,因此这两种方法应该同样(不)可靠。如果您的代码在主线程上执行昂贵的计算并且没有将控制权返回给运行循环,或者如果运行循环必须处理大量事件,则计时器将不会按时触发。

于 2009-11-17T13:36:07.923 回答
1

有一个 NSTimer,但时间间隔比你的声音必须播放的时间间隔小得多。当您的计时器启动时,即在您的声音播放时有几次,您将计算自启动它以来已经过去了多少时间。当该时间超过您设置的余量时,您将停止声音。

于 2009-11-17T12:05:41.133 回答
0

根据我的理解,它们应该几乎相同。但是,解决这个问题的最好方法是自己测试。运行一堆测试并记录准确的时间,然后看看哪个更接近。

于 2009-11-17T05:42:47.813 回答