AS3: слабые ссылки должны быть удалены? - PullRequest
1 голос
/ 18 сентября 2011

Нужно ли удалять слушателей со слабыми ссылками, чтобы происходил сбор мусора? Является ли хорошей практикой удаление слушателей, даже если на них слабо ссылаются, или мы можем рассчитывать на сборщик мусора для правильного обращения с ними?

Ответы [ 3 ]

1 голос
/ 18 сентября 2011

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

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

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

Сборщик мусора быстро удалит слабых слушателей после удаления сильной ссылки на него.Слабые слушатели делают уборку намного проще.Хотя люди осторожны, как я уверен, вы услышите, потому что слабые слушатели довольно плохо знакомы с фреймворками UI.Когда GC был добавлен к основным языкам, большинство людей слишком осторожно относились к этому.

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

0 голосов
/ 18 сентября 2011

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

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

0 голосов
/ 18 сентября 2011

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

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

Разъяснения относительно слабых ссылок в слушателях ActionScript

http://gingerbinger.com/2010/07/actionscript-3-0-events-the-myth-of-useweakreference/

...