Анонимные функции как обработчики событий в Action Script - хорошо или плохо?

Я пришел в AS3 из мира JS, и должен признаться, что анонимные функции - моя слабость. Я обычно использую их везде. Теперь, переходя к AS3 I ' Я слышал и читал во многих местах, что AS и Flash чрезвычайно плохо справляются со сборкой мусора, что следует очищать, утилизировать и удалять все обработчики событий и объекты вручную, чтобы избежать странных и необъяснимых утечек и сбоев памяти. Не уверен, что из этого правда, но я хотел бы с самого начала следовать передовым методам.

Итак, мой вопрос - насколько плоха идея использования анонимных функций в качестве обработчиков событий? Рассмотрим, например, такой код:

addEventListener(Event.ENTER_FRAME, function() : void {
    controls.elapsed = stream.time;
});

contorls.elapsed - это установщик, который помимо установки текущего времени воспроизведения для видеоплеера, обновляет весь пользовательский интерфейс, а поток - это NetStream объект, передающий фактическое видео.

Есть много других мест, где анонимная функция может сделать код более чистым и интуитивно понятным. Проверьте следующий код на наличие простого эффекта постепенного появления на панели управления:

public function showControls() : void
    {
        var self:Controls = this;

        if (!visible) {
            visible = true;
            fadeTimer = new Timer(30, 10);
            fadeTimer.addEventListener(TimerEvent.TIMER, function() : void {
                self.alpha += 0.1;
            });
            fadeTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function() : void {
                self.alpha = 1;
            });
            fadeTimer.start();
        }
    }

Мне очень нравится, как он выглядит и вписывается в код, но меня беспокоят утечки. Хотя обработчик Event.ENTER_FRAME, вероятно, никогда не стал бы вредным в этой форме, что насчет слушателей таймера. Должен ли я удалить этих слушателей вручную, или они будут удалены автоматически, как только я установлю fadeTimer = null ? Можно ли вообще правильно удалить слушателей с анонимными функциями?

6
задан jayarjo 12 December 2010 в 09:45
поделиться