Actionscript 3: вам нужно удалить EventListeners? - PullRequest
3 голосов
/ 05 января 2010

В ActionScript 3 я динамически создаю объекты, к которым добавляю EventListeners. Эти объекты добавляются в массивы и могут быть удалены позже. И другие могут быть добавлены позже снова. Каждый раз, когда я создаю объект, я добавляю эти EventListeners к ним. Однако необходимо ли удалять эти прослушиватели событий при удалении этих объектов? Что происходит, когда я теряю все ссылки на объект, но не удаляю эти EventListeners? Они остаются где-то в памяти, недоступны и непригодны, или GC очищает их?

Ответы [ 2 ]

4 голосов
/ 05 января 2010

Да, вы должны удалить прослушиватели событий, если вы не используете слабые ссылки. GC не будет очищать объект, если есть ссылка на него, и при регистрации прослушивателей событий будет создана ссылка на объект, если только вы не установите параметр useWeakReference (для параметра 5 th значение addEventListener метод) до true при регистрации прослушивателя событий. Слабые ссылки не будут учитываться сборщиком мусора.

//Using strong reference: needs to be removed by calling removeEventListener
sprite.addEventListener(Event.TYPE, listenerFunction, useCaptureBool, 0, false);

//Using a weak reference: no need to call removeEventListener
sprite.addEventListener(Event.TYPE, listenerFunction, useCaptureBool, 0, true);
0 голосов
/ 05 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...