Похоже, вы не готовите свои экземпляры MovieClip
для сборки мусора. Эта тема может быть очень полезна для вас.
Вот некоторые основные вещи, которые вы хотите охватить при правильном отбрасывании мувиклипа (или любого другого объекта):
- Удалить объект из
DisplayList
(если это DisplayObject
). Это делается через то, что вы уже делаете, removeChild()
- Удалите все прослушиватели событий, которые были применены к Объекту. Лучшее, что можно сделать, - это быть в курсе этого с самого начала; под этим я подразумеваю, что когда вы звоните
addEventListener()
, обязательно где-нибудь в самом ближайшем будущем добавьте также сестру removeEventListener()
.
- Удалить ссылку на ваш объект. Это включает в себя, но не ограничивается: ссылка на Объект, являющаяся частью массива / вектора, ссылка, хранящаяся в свойстве другого объекта и т. Д.
Я могу предложить в базовом классе ваших объектов метод, который обрабатывает все это, например, remove()
или deconstruct()
.
Вот пример:
public function deconstruct():void
{
if(parent)
parent.removeChild(this);
removeEventListener(MouseEvent.CLICK, _onClick);
}
А когда вы расширяете этот класс и нуждаетесь в других функциях разыменования, просто используйте метод deconstruct()
:
override public function deconstruct():void
{
removeEventListener(MouseEvent.MOUSE_OVER, _mouseOver);
var i:int = someArray.indexOf(this);
someArray.splice(i, 1);
super.deconstruct();
}