最有可能是准时:+ timeWithTimeInterval或-performSelector:withObject:afterDelay:

时间:2009-11-17 05:40:20

标签: iphone nstimer

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

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

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


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

  • NSTimer任务
  • performSelector
  • 在调用setNeedsDisplay之后调用视图的drawRect
  • 在调用setNeedsDisplay之后调用图层的绘图例程
  • 任何其他延迟任务

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

拥有NSTimer,但其时间间隔比声音播放的时间间隔小得多。当您的计时器启动时,在声音播放时会发生几次,您可以计算自启动它以来已经过了多少时间。当该时间超过您设置的余量时,您将停止声音。

答案 2 :(得分:0)

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