Удаление родителя в AS3: делает это бесплатную память, используемую всеми детьми?

StackOverflow https://stackoverflow.com/questions/3734228

Вопрос

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

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

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

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

removeChild(movie1);

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

Это было полезно?

Решение

Ну, ничего не удаляется из памяти до сих пор, это действительно зависит от того, как Reame1 будет ссылаться. Допустим, позже в приложении вы хотите снова добавить movie1, вы должны найти, что Mover1 не только все еще здесь, но он также содержит Movie2 & Choine3.

var movie1: movieclip; что бы ни(); krymethod (); Функция, что угодно (): void {movie1 = новый movieclip (); VAR Cover2: Movieclip = New Movieclip (); VAR Cover3: Movieclip = New Movieclip (); movie1.addchild (movie2); movie1.addchild (Movie3); addchild (movie1); что угодно(); } Функция Asoceelse (): пустота {// здесь ничего не собирается мусором, Movie1 существует снаружи // Объем этой функции Removechild (Field1); // Теперь вы можете попробовать (); // Но если вы сделаете это, вы эффективно убиваете Movie2 & Field3, так как // они не ссылаются нигде. Removechild (Movie1); movie1 = null; // Это будет бросить ошибку, Movie1 ушло! попробуй это(); } Функция Trythis (): пустота {// Да, это все еще здесь со всей его контентом AddChild (Movie1); } Функция OnlyMethod (): void {var movien: movieclip = new movieclip (); VAR Cover2: Movieclip = New Movieclip (); VAR Cover3: Movieclip = New Movieclip (); movien.addchild (Movie2); movien.addchild (Movie3); // делать все, что вам нужно сделать ... // Тогда Removechild (Movien); Убирайся(); } Функция Gootout (): void {// life продолжается без movien, movie2 & movie3 // ждать, чтобы быть собранным мусором}

Другие советы

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

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

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

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

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

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

trace(movie2);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top