В одном кадре моего fla-файла (назовем его кадром 2) я загружаю несколько XML-файлов, а затем отправляю эти данные в класс, который инициализируется в этом кадре, этот класс создает несколько таймеров и слушателей.
Тогда, когда этот класс закончил, он работает. Я вызываю dispatchEvent и перехожу к кадру 3. Этот кадр также делает некоторые вещи, он инициализируется и создает несколько прослушивателей событий и таймеров. Когда это будет сделано, я снова перейду к кадру 2.
Это должно повторяться так часто, как мне нужно, поэтому мне нужно правильно очистить ссылки, и мне интересно, правильно ли я это делаю.
Для спрайтов я делаю это.
world.removeChild(Background); // world is the parent stage
Background = null;
Для экземпляров других классов я делаю это.
Players[i].cleanUp(world); // do any cleanup within the instanced class
world.removeChild(PlayersSelect[i]);
Для слушателей событий я делаю это.
if(Background != null)
{
Background.removeEventListener(MouseEvent.CLICK, deSelectPlayer);
}
Для таймеров я делаю это.
if(Timeout != null)
{
Timeout.stop();
Timeout.removeEventListener(TimerEvent.TIMER, queueHandler);
Timeout.removeEventListener(TimerEvent.TIMER_COMPLETE, queueCompleted);
Timeout = null;
}
И для библиотечных изображений я делаю это
if(_libImage!= null)
{
s.removeChild(Images._libImage); // s is the stage
_libImage= null;
}
А для самого класса в основной временной шкале я делаю это
Frame2.removeEventListener("Done", IAmDone);
Frame2.cleanUp(); // the cleanup() does all the stuff above
Frame2= null;
Даже если я сделаю все это, когда я попаду во второй кадр во 2-й раз, он будет работать в течение 1-2 секунд, а затем я получаю множество ошибок нулевых ссылок, поскольку функция очистки вызывается преждевременно.
Правильно ли я делаю уборку?
Что может вызвать преждевременное срабатывание событий?