Уничтожить / удалить метод в классе документа - PullRequest
0 голосов
/ 01 февраля 2011

Вам нужен метод уничтожения / удаления для вашего класса документов?

Скажем, у меня есть класс документа со следующим

- mouse event listeners
- timers running and or enter_frame listeners
- class variables

Нужно ли иметь метод уничтожения или утилизации, который:

- removes event listeners
- stops timers
- nulls class variables

Или это только то, что мне нужно в других объектах (спрайтах, видеоклипах), которые добавляются на сцену класса Document?

Ответы [ 2 ]

3 голосов
/ 01 февраля 2011

Как правило, вам не нужно иметь такой метод, потому что объект, представленный классом документа, имеет тенденцию жить, пока живо ваше приложение.Однако это не обязательно так.Например, если у вас есть «заглушки» swfs, вы можете очистить их, когда они выгружены.Вызывающий может вызвать unloadAndStop на загрузчике, который загрузил ваш SWF-файл (для флэш-плеера> = 10), но я думаю, что это все еще хорошая идея для очистки вещей.

Простой способ сделать это - воспользоватьсясобытий ADDED_TO_STAGE и REMOVED_FROM_STAGE.То есть всякий раз, когда ваш объект добавляется на сцену, выполняйте всю необходимую инициализацию.Когда он будет удален, сделайте свою уборку.Примерно так:

import flash.display.MovieClip;
import flash.events.Event;

public class YourDocClass extends MovieClip {

    public function YourDocClass() {
        addEventListener(Event.ADDED_TO_STAGE,setup);
        addEventListener(Event.REMOVED_FROM_STAGE,cleanup);
    }   

    private function setup(e:Event):void {
        // your setup code here
    }

    private function cleanup(e:Event):void {
        // your cleanup code here
    }
} 

Обратите внимание, что вам не нужно удалять эти два прослушивателя событий.Фактически, если вы просто оставляете их прислушиваться к событию, вы можете повторно использовать объект (хотя иногда требуется немного дополнительной осторожности, чтобы сохранить ваш объект в согласованном состоянии, хотя; использование нового экземпляра намного проще и, как правило, производительностьударить бери не проблема)

3 голосов
/ 01 февраля 2011

Как правило, хорошо иметь метод dispose(), если экземпляры вашего класса когда-либо будут "отброшены".Во флэш-памяти нет finalize() (в отличие от Java), поэтому вам нужно место для очистки.

Что нужно очистить:

  1. Таймеры работы должны быть остановлены
  2. Слушатели событий 'enterFrame' должны быть удалены
  3. Открытые сетевые соединения должны быть закрыты
  4. Все дочерние элементы, добавленные на сцену, должны быть удалены
  5. Слушатели событий стадии должны бытьудалено
  6. Объекты BitmapData должны быть удалены
  7. Воспроизведение звука должно быть остановлено

... и т. д.

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

...