AS3: Слабые ссылки на слушателя не подходят во время инициализации? - PullRequest
1 голос
/ 19 апреля 2010

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

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

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

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

1 Ответ

4 голосов
/ 19 апреля 2010

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

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

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

- отредактировано, чтобы сделать более понятным -

...