Форум 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=132427)

Denis_ex 11.11.2009 18:50

Выделение/уничтожение памяти.
 
Хочу уточнить две ситуации с выделением/уничтожением памяти.

1.
Код:

private function LaunchBall(e:MouseEvent):void
{
    var ball:CBall = new CBall();
    this.addChild(ball);
}


через определенный класс при столкновении я получаю доступ к созданному ball
и добавляю его в массив (видимость у массива глобальная).

Код:

removeChild(object);
CGlobal.delObjects.push(object); //  здесь object это созданный ball




Далее в др. месте программы, я обращаюсь к массиву и удаляю в нем ball
CGlobal.delObjects.splice(0,1);

Вопрос: в функции LaunchBall получается, мы создаем локально указатель (первый) который при выходе из функции уничтожится.
При добавлении в массив ball, создается в массиве второй указатель.
Который, с помощью splice(0,1); уничтожается.
Таким образом, получается, что на объект ball ссылок нет и сборщик мусора уничтожит его (освободит память занимаемую объектом)?

2.Имеется класс-муви клип CScene1, которая содержит много графических муви клипов (перетасканных во флеше), каждый из которых расположен в своей позиции, одним словом сцена, собранная во флеше.

Код:

var sc1:CScene1 = new CScene1;// cоздаем сцену
addChild(sc1);
removeChild(sc1); //по завершению удаляем ее из памяти.
sc1 = null;

Удаляя главный класс сцены, автоматически удалятся из памяти все графические дочерние муви клипы расположенные в sc1 (конечно с учетом, что все освобождены от events)?

Felicast 11.11.2009 20:17

1 а как же
Код AS3:

this.addChild(ball);

вы думаете там ссылки на объект нет?
2 если ссылок нет, то да

зы: прикольное название классов (чувствуется сиплюсплюсное наследие:))

Denis_ex 11.11.2009 20:46

Цитата:

Сообщение от Felicast (Сообщение 864873)
1 а как же
Код AS3:

this.addChild(ball);

вы думаете там ссылки на объект нет?
2 если ссылок нет, то да

- сорри, не привел removeChild(object); (поправился), но вобще в программе удаляю из списка отображения.

зы: прикольное название классов (чувствуется сиплюсплюсное наследие:))

- да точно, на AS3 c С++ перешел, до сих пор не привыкну, что нельзя удалить самому оператором delete динамический объект.

Котяра 12.11.2009 14:14

http://help.adobe.com/ru_RU/AS3LCR/F...rs.html#delete
Цитата:

delete Оператор
Применение
delete reference

Язык версии : ActionScript 3.0
Версии среды выполнения: Flash Player 9

Удаляет свойство объекта, заданное параметром reference. Результатом является значение true, если свойство не существует после завершения операции, в противном случае - false. Оператор delete возвращает true, если вызывается для несуществующего свойства или динамического свойства, не определенного в классе.

Оператор delete может возвратить значение false, если параметр reference не может быть удален. Невозможно удалить фиксированные свойства или переменные, объявленные при помощи инструкции var. Фиксированным свойством является переменная или метод, заявленные в определении класса.

Оператор delete нельзя использовать для удаления свойства класса, если этот класс не является динамическим классом, добавляемым во время выполнения. Свойства защищенных классов невозможно удалить при помощи оператора delete. Вместо этого установите свойство на значение null.

Примечание. Объект удалить невозможно, но можно подготовить объект для сборки мусора, удалив все ссылки на него. Типичной ссылкой на объект является указывающая на него переменная. Такую ссылку можно удалить, установив переменную на значение null. Сборщик мусора удаляет любой объект, на который нет ни одной ссылки.

Операнд
reference:* — Имя удаляемого свойства.

Результат
Boolean — Значение true в случае успешного удаления, иначе значение false.


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

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