Удалить ВСЕ дочерние элементы
Ваш скрипт не удалит все дочерние элементы mainContainer , а только половину. Почему? Поскольку каждый раз, когда вы удаляете ребенка, остальные закрываются, чтобы съесть освобожденный индекс, поэтому ваш сценарий удаляет их следующим образом:
Initial picture : 0 1 2 3 4 5 6 7 8 9
Remove child at 0: 1 2 3 4 5 6 7 8 9
Remove child at 1: 1 3 4 5 6 7 8 9
Remove child at 2: 1 3 5 6 7 8 9
Remove child at 3: 1 3 5 7 8 9
Правильный способ удаления ALL дочерних элементов из данный контейнер является либо назад l oop, который удаляет в данный момент последнего потомка:
for (var i = mainContainer.numChildren - 1; i >= 0; i--)
{
mainContainer.removeChildAt(i);
}
, либо , тогда как l oop, который удаляет дочерние элементы на глубине 0, пока они есть:
while (mainContainer.numChildren > 0)
{
mainContainer.removeChildAt(0);
}
Однако есть гораздо более простой способ опустошить контейнер (доступно из Fla sh Player 11 и далее):
mainContainer.removeChildren();
Сборщик мусора
Что касается G C, общая идея состоит в том, что нет действительных ссылок из области приложения (вещи, прикрепленные к stage и stati c членов класса) к этим объектам.
Если вы уверены, что ничто в области действия не относится к ним или не подписано на них, то G C выполнит свою работу правильно.
Лично я всегда сочиняю метод с именем destroy (...) , который демонтирует все в данном объекте: отменяет подписку на все прослушиватели событий, обрабатывает Array s длиной 0, присваивает null каждому и каждому типу переменной Object , удаляет детей и т. д. c.
Я также согласен с Jyreel , полагаться на отображение контейнеров для хранения вещей для вас - это не способ программиста, а использование этого способа, или для разработки более сложных структур данных, это решение зависит от вас и вашего понимания.