Action Script: Устанавливает ли объект значение null, автоматически удаляются все подключенные слушатели событий? - PullRequest
5 голосов
/ 20 января 2011

В последнее время я обнаружил, что постоянно пишу везде removeEventListeners, что делает код довольно грязным. Я знаю, что это лучшая практика и тому подобное, но в целом это не имеет смысла. Сборщик мусора должен сам справиться с такой простой задачей, не так ли? Трудно ли автоматически удалить всех слушателей, когда для объекта установлено значение null?

Так что я просто хочу быть уверен, что это так. Устанавливает ли объект значение null, автоматически удаляются все подключенные прослушиватели событий?

Есть идеи по этому поводу?

UPDATE : В моем случае сценарий такой: я создаю объект и присоединяю к нему группу слушателей событий, а затем через некоторое время мне нужно повторно инициализировать этот объект. Конечно, установить для этого объекта значение null намного проще, чем отменить привязку каждого слушателя вручную. И в большинстве случаев слушатели являются анонимными функциями, что означает, что это невозможно без рефакторинга кода. Когда я просто заново инициализирую переменную с помощью new , я не получаю дубликатов слушателей и тому подобное, но я не уверен, что это предыдущее значение вместе со всеми слушателями получает сборщик мусора. Это 1011 *

Ответы [ 2 ]

4 голосов
/ 20 января 2011

Нет, вы не устанавливаете объект в null, а указывает на него указатель. Он не будет захвачен сборщиком мусора, если он не нужен другим частям программы, включая слушателей. Вам нужно удалить всех слушателей самостоятельно, но это не должно помешать вам найти менее грязный способ сделать это - например, выделенный метод clearListeners или вспомогательный класс и т. Д.

0 голосов
/ 20 января 2011

Я считаю, что вам нужно использовать слабую ссылку, когда вы назначаете слушателей, и тогда "нуля" должно быть достаточно.

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