开发者

Timer vs setTimeout

The docs for flash.utils.setTimeout() state:

Instead of using this method, consider creating a Timer object, with the specified interval, using 1 as the repeatCount parameter (开发者_StackOverflow中文版which sets the timer to run only once).

Does anyone know if there is a (significant) advantage in doing so? Using setTimeout is a lot easier when you only need to delay 1 call.


setTimeout actually uses a Timer subclass, the SetIntervalTimer, which is an internal class. You can check by doing setTimeout(function ():void { throw "booom"; }, 1);. You'll see it in the stack trace.

As such, I cannot really see a big disadvantage. The only difference is, that you have 2 anonymous calls instead of one. OTOH, in performance critical situations, you shouldn't be using either (except one internal timer) to avoid frequent instantiation of TimerEvent objects.

Basically, I think it's a matter of taste. Adobe decided, the AS3 event system is the shizzle, so they promote it.


Timer:

  • Gives you more control as you can register more event listeners to receive the event rather than a single one with setTimeout

  • You can control the start time and
    the number of repetitions ( not very useful against setTimeout, as this
    has to run just once and after a
    delay considering the immediate time it was called)

  • More lines to write, even more if you need to differentiate with parameters ( custom event class for this )
  • Use of event listeners which is
    standard practice in as3.
  • Cleaner look

setTimeout:

  • Easier to use

  • Less code to write

  • Parameters can be easily sent;

I prefer the Timer class but I've seen setTimeout being frequently used by programmers.

Also if you are using Tweening libraries,some support delayed call

For example TweenMax TweenMax.delayedCall(2, myFunction, ["myParam"]);

For all those who say that setTimeout is deprecated, this is non sense..

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

I believe you can't see any "deprecated" keyword around setTimeout here


setTimeout is working perfectly well in external .as files.

Just use this in the class :

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


It's my understanding that setTimeout is depreciated in AS3. I'm having a bit of trouble finding the source of the setTimeout code, but I also believe it's easier to clear up any references to the Timer object, than with setTimeout (if I remember correctly from AS2).


Usually something becomes deprecated if there becomes new and more powerful way to achieve something.

Yes setTimeout is much more easier to setup in some cases, but it is much more limited in other cases.

I would use the Timer class, because usually when something is deprecated, it means support may be removed for it sometime in the future, and then your code won't work.


The problem is, the Timer object is not at all accurate, and is subject to framerate fluctuations. Read http://forums.adobe.com/message/892631. I created my own Timer (called RealTimer) using the Date object and it is much more accurate. I recommend doing the same.


setTimeout is not working in external .as files.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜