ГлавнаяActionScript 3 — «100 советов» › Ключевое слово delete и члены класса

Ключевое слово delete и члены класса

June 19th, 2006
Ключевое слово delete во Flash используется для удаления определений переменных. Оно не удаляет объекты из памяти (это происходит за кулисами с помощью так называемого “сборщика мусора” /”Garbage Collector”/ ), а просто берет созданную вами переменную и избавляется от нее, делая ее недоступной и невидимой для итераторов (for..in циклы, и т.п.).

Внутренние механизмы Garbage Collector (GC для краткости), знают когда физически удалять объекты из памяти – когда больше нет переменных, ссылающихся на них. Так, например, если у вас есть две переменные A и B и они обе ссылаются на ObjectX, удаление переменной A не приведет к удалению сборщиком мусора ObjectX из памяти. Однако, если вы удалите обе переменные A и B, больше не будет ссылок на ObjectX и GC будет знать, что объект нуждается в удалении из памяти

Код:
var a:Object = new Object(); var b:Object = a; // reference same new Object(); delete a; trace(b); // [object Object] - still exists in memory delete b; // GC will mark object for deletion from memory

Этот механизм работает практически одинаково для Flash 8 и Flash 9 (ActionScript 1, 2, и 3), однако в 8 были сделаны некоторые изменения для оптимизации GC. (Примечание: GC очищает память не сразу.)

Хотя GC и новая виртуальная машина, управляющая им, на самом деле не сильно изменились в ActionScript 3, что изменилось, так это поведение ключевого слова delete. Теперь ключевое слово delete работает только для динамических свойств экземпляров класса, но не для объявленных членов класса (переменных и методов). В ActionScript 1 и 2 delete можно было использовать для всего. ActionScript 3 позволит только удалить динамические переменные и заблокирует прочее.

Код:
// ActionScript 2 class DeleteVarClass { public var myVar:Number; function DeleteVarClass() { myVar = 1; trace(myVar); // 1 delete myVar; trace(myVar); // undefined } }
Код:
// ActionScript 3 package { public class DeleteVarClass { public var myVar:Number; public function DeleteVarClass() { myVar = 1; trace(myVar); // 1 delete myVar; trace(myVar); // 1 } } }

Поскольку myVar в примере выше был объявлен как свойство класса, он не может быть удален в ActionScript 3.

Поскольку вы не можете удалять члены класса в ActionScript 3, если вы хотите, чтобы переменная больше не ссылалась на объект или значение в памяти, вы можете установить значение переменной в null вместо ее удаления.

Код:
myVar = null;

Категория: ActionScript 3 — «100 советов» Ярлыки: ,

Смотрите также

Новое поведение MouseMove Класс Dictionary
  1. Пока без комментариев.
  1. Пока нету.