Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Корректное удаления экземпляра из памяти (http://www.flasher.ru/forum/showthread.php?t=172587)

enepx 13.12.2011 14:06

Корректное удаления экземпляра из памяти
 
Привет всем.
Простая ситуация: есть объект, в конструкторе создается кнопка, подписывается на MouseEvent.CLICK. Потом экземпляр этого объекта удаляется (removeChild) с родителя. Нужно ли отписать кнопку от MouseEvent.CLICK для корректного удаления из памяти?
Спасибо.

Inet_PC 13.12.2011 14:07

Да нужно.

enepx 13.12.2011 14:08

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

gloomyBrain 13.12.2011 14:13

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

Inet_PC 13.12.2011 14:15

Цитата:

но может именно тут зря?
Никогда не зря, плюс чистая совесть.
Цитата:

Удаление подписки за "внешние" объекты на обсуждается, вопрос именно о внутренних объектах класса.
А какая разница?

Добавлено через 31 секунду
Опоздал

smithy 13.12.2011 14:21

В некоторых случаях можно использовать weakReference=true:
Код AS3:

_button.addEventListener( MouseEvent.CLICK, onClick, false, 0, true )

При сборке мусора такой листенер не будет являться ссылкой на объект.

enepx 13.12.2011 14:25

Это я все знаю и использую. Вопрос в целесообразности удаления подписки на объект, который является ребенком и "убивается" автоматически при "убийстве" родителя.

goodguy 13.12.2011 15:10

Он не убивается, если на него есть ссылки. Это покажет любой профайлер.

in4core 13.12.2011 15:13

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

i.o. 13.12.2011 15:15

Цитата:

Слушатель клика не грузит память
Ок, пруф в студию.


Часовой пояс GMT +4, время: 12:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.