Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удаление всех объектов массива (http://www.flasher.ru/forum/showthread.php?t=202792)

Anabel 11.08.2013 01:00

Удаление всех объектов массива
 
Допустим есть код, который что-то создаёт. То что он создаёт, он добавляет в массив. И объекты, которые в массиве появляются на экране. Но во время выполнения кода понадобилось, что бы все объекты массива были удалены. И таких массивов много. Есть простой способ удалить их объекты с поля всех сразу? Или нужно прибегать к помощи циклов и удалять по одному?

Akopalipsis 11.08.2013 01:05

Если Вам нужно удалить все обьекты, то нужно сначала удалить все ссылки на них ( то есть удалить их в вашем примере из массива, а потом самую главную ссылку\переменную занулить ).
Если вам нужно за раз очистить весь массив, то его тоже можно занулить.
Код AS3:

array = null;
 
array.length = 0;//или вот так не удаляя массив просто удалить все в нем


Wolsh 11.08.2013 01:54

Речь то, судя по "удалить их объекты с поля", о дисплейных объектах, которым нет дела до ссылок на них в каком-то там массиве. Ну занулите вы массив — дисплейные объекты то никуда не денутся.

Akopalipsis 11.08.2013 02:19

Не денутся.. Можно уточнить,
Цитата:

которым нет дела до ссылок на них в каком-то там массиве
дисплей обжектам ссылки в массиве не помешают удалиться?
Код AS3:

var container:Sprite = new Sprite();
$doc.addChild(container);
var array:Array = [];
var sp:Sprite
var spX:int = 0;
var spY:int = 0;
for (var i:int = 0 ; i < 10 ; i++)
{
        sp = new Sprite();
        sp.graphics.beginFill(0xFC1D55);
        sp.graphics.drawCircle(spX, spY, 50);
        sp.graphics.endFill();
        array[i] = sp;
        container.addChild(array[i] as DisplayObject);
        spX += 50;
}
while (container.numChildren)
{
        container.removeChildAt(0)
}
//или сразу всех container.removeChildren();


Wolsh 11.08.2013 02:28

Цитата:

дисплей обжектам ссылки в массиве не помешают удалиться?
Откуда удалиться? Со сцены? Нет)))

Akopalipsis 11.08.2013 02:31

Цитата:

Откуда удалиться? Со сцены? Нет)))
Представление которое удалилось из DOC будет собрано GC, если массив хранит на него ссылку?

Wolsh 11.08.2013 02:33

Нет конечно.

Akopalipsis 11.08.2013 02:37

Цитата:

Сообщение от Wolsh (Сообщение 1143408)
Нет конечно.

Тогда эти слова адресуются автору. Ещё и нулюйте)

Wolsh 11.08.2013 02:44

Если все объекты лежат в одном контейнере и надо очистить ВЕСЬ контейнер, то делаем removeChildren().
Если при этом надо еще и удалить объекты из памяти, то еще и зануляем массив.
Если нужно очистить НЕ весь контейнер, или объекты массива разбросаны по разным контейнерам, пробегаемся по массиву циклом, выдергивая каждый объект из его парента, а затем зануляем массив.

MikroAcse 11.08.2013 11:39

И с чего Вы взяли, что DisplayObject, который добавлен на сцену, должен быть собран и удален GC?


Часовой пояс GMT +4, время: 21:16.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.