Финализаторы в Adobe Flex 3

Используя Adobe Flex 3, есть ли способ указать финализатор?

2 ответа

Решение

В ActionScript 3 отсутствует концепция финализатора / деструктора даже на уровне AVM/ байт-кода.

Несмотря на то, что в ActionScript по сути нет деструктора / финализатора, я бы посоветовал иметь метод, который освобождает все ресурсы в вашем классе, когда они вам больше не нужны.

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

Поэтому вы должны иметь destroy() или же finalize метод, который:

  • удаляет всех слушателей событий
  • звонки destroy() или же finalize() на вложенных объектах
  • deleteвсе сильные объектные ключи в словарях
  • устанавливает все переменные типа объекта в null (это нормально, что примитивные значения не сбрасываются)

Для экранных объектов обычно неплохо вызывать этот метод, когда Event.REMOVED_FROM_STAGE отправляется.

Другие вопросы по тегам