как я удаляю/gc объект в Actionscript 3?

В конце концов, я получил ответ методом проб и ошибок.

\| Average \| .*\d+\% +\| *(\d*.\d\%) +\| +\d

будет математике столбец ниже ветви. Спасибо всем за помощь!

20
задан evilpenguin 2 April 2009 в 11:51
поделиться

6 ответов

Вы не должны пытаться удалить объект из себя - это - плохая практика, и в AS3 Вы не можете сделать этого наверняка.

Объект может быть удален (т.е. собрал "мусор"), только при отсутствии ссылок, оставленных тому объекту. Так как ссылки всегда передаются значением, и объект обычно не знает, какие ссылки на него существуют, Вы не можете удалить объект из себя. Единственная полезная вещь, которую можно сделать, состоит в том, чтобы создать метод, который очистит все ресурсы, используемые экземпляром. Такой метод будет служить деструктором, но необходимо будет назвать его вручную. Не забывайте, что слушатели события также предотвратят сборку "мусора", если Вы не удалите их.

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

Существуют определенные взломы, которые могут использоваться для инициирования сборки "мусора" в Flash player 9 и более старые. Однако недавно System.gc() звоните стал доступным, который делает то же самое. Обратите внимание на то, что Вы не можете действительно полагаться на то, что GC на самом деле назовут. Это до Flash player.

Возврат вопросу: соревнование по метанию и уведомляющий родителя, что что-то пошло не так, как надо, является на самом деле хорошей идеей. Необходимо придерживаться его. Кроме того, лучше, если родитель будет знать такого события тот путь, и не, когда это обнаружит, что некоторые свойства были волшебно обнулены.

P.S.: статьи Reading Grant Skinner о памяти в Flash player являются на самом деле хорошей идеей.

22
ответ дан 30 November 2019 в 00:31
поделиться

AS3 не дает Вам деструкторов. Лучшее, которое можно сделать, установлено все ссылки на null и держите пальцы скрещенными - что GC заметит его и освободит память.

1
ответ дан 30 November 2019 в 00:31
поделиться
System.gc()
// Forces the garbage collection process. 

Ссылка:

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/system/System.html

1
ответ дан 30 November 2019 в 00:31
поделиться

У Вас должно быть чтение о сборке "мусора" сначала, Grant. S написал хорошую статью об этом:

http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html

Точка не должна устанавливать сам класс, чтобы аннулировать, но удалить все его ссылки включая слушателей. После того как это является абсолютно осиротевшим, мусор может взять его однажды.

Основной пример:

// References a newly created sprite
var reference:Sprite = new Sprite();

// Removes the reference, the Sprite is now orphaned and will probably be garbage collected within some seconds.
reference = null;

Хорошая практика должна систематически создавать 'разрушать' метод на всех Ваших классах, который удаляет все его внутренние ссылки, располагает битовые массивы, удаляет слушателей события и т.д., после этого необходимо будет просто волноваться об удалении связи с внешними.

При использовании Разработчика FLEX можно использовать профилировщика для визуализации способа, которым Flash player обрабатывает все это внутренне.

1
ответ дан 30 November 2019 в 00:31
поделиться

Вот неподдерживаемый способ вынудить сборку "мусора" покинуть GSkinner.

try {
   new LocalConnection().connect('foo');
   new LocalConnection().connect('foo');
} catch (e:*) {}
// the GC will perform a full mark/sweep on the second call.
1
ответ дан 30 November 2019 в 00:31
поделиться

Если объект был добавлен в DisplayContainer с помощью метода addChild(), вы можете удалить объект из контейнера изнутри объекта, используя parent.removeChild(this). Если после этого не останется ссылок на объект, он будет собран сборщиком мусора.

Единственная проблема - это когда у вас есть слушатели событий внутри объекта, которые вы можете удалить вручную или позволить сборщику мусора сделать это за вас, установив weakReference=true для всех слушателей.

5
ответ дан 30 November 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: