Удаление родителя в AS3: освобождает ли это память, используемую всеми детьми? - PullRequest
2 голосов
/ 17 сентября 2010

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

Я дам немного большеобъяснение на случай, если я не выражаю то, что хочу:

addChild(movie1);
movie1.addChild(movie2);
movie1.addChild(movie3);

Используя этот код:

removeChild(movie1);

Удаляет ли он movie2 и movie3 из памяти или они все еще сохранены,просто не связаны?

Ответы [ 3 ]

3 голосов
/ 17 сентября 2010

Если на movie2 и movie3 больше не ссылаются другие объекты, они должны быть удалены. То же самое относится к movie1.

С Создание визуальных компонентов Flex в ActionScript :

Чтобы программно удалить элемент управления, Вы можете использовать removeChild () или методы removeChildAt (). Вы также можете используйте метод removeAllChildren () для удалить все дочерние элементы управления из контейнер. Вызов этих методов делает на самом деле не удалять объекты. Если у вас нет других ссылок ребенку, Flash Player включает его в сборке мусора в будущем точка. Но если вы сохранили ссылку этому ребенку на каком-то объекте, ребенок не удаляется из памяти.

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

Ну, пока ничего не удалено из памяти, это действительно зависит от того, как ссылается на movie1.Предположим, что позже в приложении, которое вы хотите снова добавить в фильм movie1, вы обнаружите, что movie1 не только еще здесь, но также содержит movie2 и movie3.

0 голосов
/ 17 сентября 2010

Конечно, он удаляет все 3.

Детский фильм 1 имеет двоих детей, фильм2 + 3. Если он умрет из-за какой-то инстанции, дети тоже могут умереть.

Может быть, я ошибаюсь, но вы также можете попробовать:

trace(movie2);
...