В конце концов, я получил ответ методом проб и ошибок.
\| Average \| .*\d+\% +\| *(\d*.\d\%) +\| +\d
будет математике столбец ниже ветви. Спасибо всем за помощь!
Вы не должны пытаться удалить объект из себя - это - плохая практика, и в AS3 Вы не можете сделать этого наверняка.
Объект может быть удален (т.е. собрал "мусор"), только при отсутствии ссылок, оставленных тому объекту. Так как ссылки всегда передаются значением, и объект обычно не знает, какие ссылки на него существуют, Вы не можете удалить объект из себя. Единственная полезная вещь, которую можно сделать, состоит в том, чтобы создать метод, который очистит все ресурсы, используемые экземпляром. Такой метод будет служить деструктором, но необходимо будет назвать его вручную. Не забывайте, что слушатели события также предотвратят сборку "мусора", если Вы не удалите их.
Существует также различие между delete
'луг свойство и установка его к null
. Эффективно delete
удалит свойство из экземпляра динамического класса. Принимая во внимание, что установка значения свойства к null
не удалит свойство, но сотрет любую ссылку, которая была сохранена там. Поэтому оба действия уничтожат ссылку, которая была сохранена в некотором свойстве. Обратите внимание на то, что Вы не можете delete
объект, только свойство.
Существуют определенные взломы, которые могут использоваться для инициирования сборки "мусора" в Flash player 9 и более старые. Однако недавно System.gc()
звоните стал доступным, который делает то же самое. Обратите внимание на то, что Вы не можете действительно полагаться на то, что GC на самом деле назовут. Это до Flash player.
Возврат вопросу: соревнование по метанию и уведомляющий родителя, что что-то пошло не так, как надо, является на самом деле хорошей идеей. Необходимо придерживаться его. Кроме того, лучше, если родитель будет знать такого события тот путь, и не, когда это обнаружит, что некоторые свойства были волшебно обнулены.
P.S.: статьи Reading Grant Skinner о памяти в Flash player являются на самом деле хорошей идеей.
AS3 не дает Вам деструкторов. Лучшее, которое можно сделать, установлено все ссылки на null
и держите пальцы скрещенными - что GC заметит его и освободит память.
System.gc()
// Forces the garbage collection process.
Ссылка:
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/system/System.html
У Вас должно быть чтение о сборке "мусора" сначала, 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 обрабатывает все это внутренне.
Вот неподдерживаемый способ вынудить сборку "мусора" покинуть GSkinner.
try {
new LocalConnection().connect('foo');
new LocalConnection().connect('foo');
} catch (e:*) {}
// the GC will perform a full mark/sweep on the second call.
Если объект был добавлен в DisplayContainer с помощью метода addChild(), вы можете удалить объект из контейнера изнутри объекта, используя parent.removeChild(this). Если после этого не останется ссылок на объект, он будет собран сборщиком мусора.
Единственная проблема - это когда у вас есть слушатели событий внутри объекта, которые вы можете удалить вручную или позволить сборщику мусора сделать это за вас, установив weakReference=true для всех слушателей.