я, возможно, не так понял, но у меня при удалении "главным родителем" всех своих детей "внуки" никуда не пропадают, толькое если их не уничтожит сам родитель. Другими словами,
Объект 1 - родитель для объекта 2
Объект 2 - родитель для объекта 3
При удалении объектом 1 всех своих детей объект 3 по-прежнему остаётся. А при повторном создании объекта 2 у него вместо одного ребёнка становится уже 2 (проверял через trace(numChildren))
Причём, я проверил, на некоторые их неудалённых детей больше никто не ссылался.
Слабые ссылки я ещё не пробовал, но теперь это уже не главная проблема.
Если я не смогу вызывать System.gc() в релизе, значит на него вообще не имеет смысла расчитывать в плане чистки в нужные мне моменты?
Я совсем запутался. Поможет ли для чистки такой подход:
В каждом классе, подлежащем помещению на сцену, писать:

Код AS3:
package {
import flash.display.Sprite;
import flash.events.Event;
public class ClassName extends Sprite {
// свойства
child:Object; // какой-то объект-ребёнок
// Контсруктор
public function ClassName() {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
addEventListener(Event.REMOVED_TO_STAGE, cleanup);
// добавляем детей
child = new Child();
addChild(child);
// добавляем слушателей детям (при необходимости)
child.addEventListener(Event.ENTER_FRAME,childupdate)
// добавляем слушателей себе
addEventListener(Event.ENTER_FRAME,update)
}
private function cleanup(e:Event):void {
// удаляем слушателей детей
child.removeEventListener(Event.ENTER_FRAME,update)
// удаляем детей
while (numChildren > 0) { removeChildAt(0) };
// удаляем своих слушателей
removeEventListener(Event.ENTER_FRAME,update)
removeEventListener(Event.REMOVED_TO_STAGE, cleanup);
}
private function update():void {
//
};
private function childupdate():void {
//
};
}
}