定时器与setTimeout

时间:2010-04-21 13:41:35

标签: flex actionscript-3

flash.utils.setTimeout()状态的文档:

  

不要使用此方法,请考虑   创建一个Timer对象,用   指定的间隔,使用1作为   repeatCount参数(设置   计时器只运行一次)。

有人知道这样做是否有(显着)优势吗?当你只需要延迟1次呼叫时,使用setTimeout会容易得多。

7 个答案:

答案 0 :(得分:11)

setTimeout实际上使用Timer子类SetIntervalTimer,这是一个内部类。您可以执行setTimeout(function ():void { throw "booom"; }, 1);进行检查。你会在堆栈跟踪中看到它。

因此,我不能真正看到一个很大的劣势。唯一的区别是,您有2个匿名呼叫而不是一个。 OTOH,在性能危急的情况下,您不应该使用(除了一个内部计时器)以避免频繁实例化TimerEvent个对象。

基本上,我认为这是一个品味问题。 Adobe决定,AS3事件系统是shizzle,所以他们推广它。

答案 1 :(得分:8)

<强>定时器:

  • 尽可能提供更多控制权 注册更多事件监听器 收到活动而不是 单一的setTimeout

  • 您可以控制开始时间和
    重复的次数(不是很多 对setTimeout很有用,因为这个 必须只运行一次,然后运行一次 考虑到即时的延迟 它被称为

  • 写更多行,如果你更多 需要区分参数 (自定义事件类)
  • 使用事件监听器 as3中的标准做法。
  • 清洁外观

<强>的setTimeout:

  • 更易于使用

  • 编写更少的代码

  • 可以轻松发送参数;

我更喜欢Timer类,但我看到程序员经常使用setTimeout。

此外,如果您正在使用补间库,则某些支持延迟调用

例如TweenMax TweenMax.delayedCall(2,myFunction,[“myParam”]);

对于所有那些说不推荐使用setTimeout的人来说,这是没有意义的。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#setTimeout%28%29

我相信你在这里找不到任何“弃用”关键字

答案 2 :(得分:2)

setTimeout在外部.as文件中运行良好。

在课堂上使用它:

import flash.utils.*;
import flash.events.TimerEvent;

答案 3 :(得分:0)

我的理解是在AS3中折旧了setTimeout。我在查找setTimeout代码的源代码时遇到了一些麻烦,但我也相信清除对Timer对象的任何引用比使用setTimeout更容易(如果我从AS2中正确记得的话)。

答案 4 :(得分:0)

如果有新的和更强大的方法来实现某些东西,通常会被弃用。

是的,setTimeout在某些情况下更容易设置,但在其他情况下更受限制。

我会使用Timer类,因为通常在弃用某些东西时,这意味着将来某个时候可能会删除支持,然后您的代码将无效。

答案 5 :(得分:0)

问题是,Timer对象完全不准确,并且受到帧速率波动的影响。阅读http://forums.adobe.com/message/892631。我使用Date对象创建了自己的Timer(称为RealTimer),它更准确。我建议也这样做。

答案 6 :(得分:-2)

setTimeout在外部.as文件中不起作用。