флеш сборщик мусора и обработка событий - PullRequest
0 голосов
/ 20 февраля 2012

взгляните на следующий код

var a = new View();
a = null;
....
class View {
    private var clip: MovieCLip

    public function View() {
        clip.addEventListener(...)
    }
}

будет ли a в памяти после a = null?addEventListener добавляет сильную ссылку?

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012

Как вы описываете свой пример, объект, к которому подключен прослушиватель событий, не будет собираться мусором.Даже установка нуля не поможет.

Чтобы получить этот объект, перейдите в gc (), вы можете использовать один из следующих подходов:

  1. useWeakReference

    clip.addEventListener(EVENT.name,listenerMethod,false,0,true);

  2. прослушиватель отмены подписки.

В методе обработчика

function handlerMethod(ev:Event):void
{
  clip.removeEventListener(EVENT.name,listenerMethod);
}
2 голосов
/ 20 февраля 2012

По умолчанию addEventListener добавляет сильную ссылку.Последний параметр addEventListener равен useWeakReference.Вы можете использовать true для этого параметра, чтобы указать слабую ссылку.

1 голос
/ 20 февраля 2012

Поскольку все ссылки на clip находятся в пределах a, GC подберет оба объекта и аккуратно удалит их.

Я взял ваш пример и использовал слушатель ENTER_FRAME для создания новых View s так же, как вы это делали:

Graph object not added to the stage

Если, однако,клип был добавлен на сцену, затем он продолжал бы существовать, и a также не будет удален:

Graph for objects added to the stage

Вы можете использовать useWeakReference параметр addEventListener чтобы этого не случилось.

...