AS3 Нужно ли удалять childs, если я удаляю родительский itseft? - PullRequest
0 голосов
/ 30 сентября 2010

Во флеш-памяти AS3 Нужно ли удалять дочерние элементы, если я удаляю родительский итефт? Если я сначала удаляю childs, то удаляю родительский объект afterall
OR
Если я просто удаляю родительский объект

Вспышка займет ту же память?

1 Ответ

1 голос
/ 30 сентября 2010

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

var obj = new MainContainer();
obj.addEventListener(MouseEvent.CLICK, MainContainer_Clicked)
addChild(Obj)

Теперь удаление объекта Obj с помощью removeChild (obj) удалит его из рабочей области, но не из памяти.Вы должны установить obj=null.И то же самое относится и к детям MainContainer, если он есть.Теперь вам нужно вручную удалить прослушиватель событий, прикрепленный к obj, таким образом

obj.removeEventListener(MouseEvent.CLICK, MainContainer_Clicked)

ИЛИ использовать слабый прослушиватель событий, если вы не хотите, чтобы он удалял себя вот так

obj.addEventListener(MouseEvent.CLICK, MainContainer_Clicked,false,0,true)

ЧтениеПодробнее о слабом слушателе событий здесь

http://gskinner.com/blog/archives/2006/07/as3_weakly_refe.html

...