Таймер против setTimeout - PullRequest
10 голосов
/ 21 апреля 2010

Документы для состояния flash.utils.setTimeout ():

Вместо использования этого метода рассмотрим создание объекта Timer, с указанный интервал, используя 1 в качестве Параметр repeatCount (который устанавливает таймер для запуска только один раз).

Кто-нибудь знает, есть ли (значительное) преимущество в этом? Использование setTimeout намного проще, когда вам нужно только отложить 1 вызов.

Ответы [ 7 ]

11 голосов
/ 21 апреля 2010

setTimeout фактически использует подкласс Timer, SetIntervalTimer, который является внутренним классом. Вы можете проверить, выполнив setTimeout(function ():void { throw "booom"; }, 1);. Вы увидите это в трассировке стека.

Таким образом, я не вижу большого недостатка. Разница лишь в том, что у вас есть 2 анонимных звонка вместо одного. OTOH, в критических ситуациях производительности вы не должны использовать ни один (кроме одного внутреннего таймера), чтобы избежать частой реализации TimerEvent объектов.

В принципе, я думаю, что это вопрос вкуса. Adobe решила, что система событий AS3 - это настоящая борьба, поэтому они ее продвигают.

8 голосов
/ 22 апреля 2010

Таймер:

  • Дает вам больше контроля, как вы можете зарегистрировать больше слушателей событий получить событие, а не один с setTimeout

  • Вы можете контролировать время начала и
    количество повторений (не очень полезно против setTimeout, как это
    должен запускаться только один раз и после
    задержка с учетом немедленного времени это называлось)

  • Больше строк написать, даже больше, если вы нужно дифференцировать с параметрами (пользовательский класс событий для этого)
  • Использование прослушивателей событий, которые
    стандартная практика в as3.
  • Чистый вид

SetTimeout:

  • Легче использовать

  • Меньше кода для записи

  • Параметры могут быть легко отправлены;

Я предпочитаю класс Timer, но я видел, как setTimeout часто используется программистами.

Также, если вы используете библиотеки Tweening, некоторые поддерживают отложенный вызов

Например, TweenMax TweenMax.delayedCall (2, myFunction, ["myParam"]);

Для всех тех, кто говорит, что setTimeout устарела, это не имеет смысла ..

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

Я полагаю, что вы не видите здесь ни одного "устаревшего" ключевого слова вокруг setTimeout

2 голосов
/ 15 ноября 2012

setTimeout отлично работает во внешних файлах .as.

Просто используйте это в классе:

import flash.utils.*;
import flash.events.TimerEvent;
0 голосов
/ 21 апреля 2010

Проблема в том, что объект Timer не совсем точен и подвержен колебаниям частоты кадров. Прочитайте http://forums.adobe.com/message/892631. Я создал свой собственный таймер (называемый RealTimer), используя объект Date, и он стал намного точнее. Я рекомендую сделать то же самое.

0 голосов
/ 21 апреля 2010

Обычно что-то становится устаревшим, если появляется новый и более мощный способ чего-то достичь.

Да, setTimeout гораздо проще настроить в некоторых случаях, но в других случаях он намного более ограничен.

Я бы использовал класс Timer, потому что обычно, когда что-то устарело, это означает, что поддержка может быть удалена для него в будущем, и тогда ваш код не будет работать.

0 голосов
/ 21 апреля 2010

setTimeout не работает во внешних файлах .as.

0 голосов
/ 21 апреля 2010

Насколько я понимаю, setTimeout устарела в AS3.У меня возникли некоторые проблемы с поиском источника кода setTimeout, но я также считаю, что легче очистить любые ссылки на объект Timer, чем с setTimeout (если я правильно помню из AS2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...