1

как я понимаю, если слушатель событий добавлен к объекту с использованием useWeakReference, установленным в true, тогда он имеет право на сбор мусора и будет удален, если и когда сборщик мусора выполняет развертку.AS3: Слабые ссылки на прослушиватели не подходят во время инициализации?

public function myCustomSpriteClass() //constructor 
    { 
    this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener, false, 0, true); 
    this.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener, false, 0, true); 
    } 

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

В этом случае было бы целесообразным создать тип метода deallocate(), который удаляет прослушиватели событий до того, как объект будет аннулирован?

ответ

4

слабые прослушиватели событий означают, что слушатели не учитываются в процедуре сбора мусора, например. если у объекта нет других указателей, кроме сильных eventlisteners, он не будет собран GC, если он имеет только слабые ссылки, то он будет удален.

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

лично я считаю, что использование слабых слушателей способствует плохим практикам, поскольку вам больше не нужно думать о том, какие ресурсы вы используете, хотя они полезны в определенных ситуациях. У меня был бы сценарий очистки, чтобы отключить его слушателей, которые вы запускаете до аннулирования. although there are evangelists for both sides (и он мог бы объяснить это лучше, если вы до сих пор путает)

-edited сделать более четкие чувственные

+0

так ты говоришь, обработчик событий оба должны использовать слабые ссылки и чистую вверх функцию? извините, ваше заявление смущает меня: «Если у объекта нет других указателей, кроме сильных eventlisteners, он не будет собран GC, если он имеет только слабые ссылки, то он будет удален. сами слушатели событий не удаляются GC, вы должны удалить их таким же образом ». если я правильно читаю, вы сказали, что только слабые ссылки на прослушиватели событий будут удалены GC, но тогда вы скажете, что GC не удаляет их ... ??? – TheDarkIn1978

+0

ive отредактировал сообщение, чтобы попытаться быть более явным. см., если это помогает понять, извините за плохую формулировку. – longstaff

+0

ОК, я думаю, что, наконец, я понял. по существу, избыточно вызывать removeEventListener на объекте, который добавил слушателя со слабой ссылкой, до уничтожения цели прослушивателя события, установив его в null. – TheDarkIn1978