2015-02-28 4 views
0

Я хочу свернуть event.target для сбора мусора, поскольку moveclip больше не нужен. Что у меня есть примерно так:Установить event.target в null

mc.addEventListener(MouseEvent.CLICK, destroy); 

public function destroy(event:MouseEvent):void { 


     event.target.parent.removeChild(event.target); 

     event.target.removeEventListener(MouseEvent.CLICK, destroyShape); 

     event.target = null; //THIS IS WHAT I WANT TO ACHIEVE 


    } 

Я уверен, что это относительно просто, но я не уверен, как это сделать.

благодарит

+0

Нет необходимости аннулировать свойство события. Даже если бы вы этого не достигли. – BotMaster

ответ

1

Вы не можете изменить значение MouseEvent.target. Это свойство только для чтения. Если ваш MovieClip не существует (removeChild), и вы удалили обработчик событий mc.removeEventListener(MouseEvent.CLICK, destroy); , тогда сборщик мусора автоматически удалит его.

-1

Как указано в @subdan, свойство target любого события является свойством readonly. Вы все еще можете удалить свой клип, но не похожи на ваш образец.

mc.addEventListener(MouseEvent.CLICK, destroy); 

public function destroy(event:MouseEvent):void 
{ 

    var myMC:MovieClip = event.target as MovieClip; 

    if(myMC) 
    { 
     myMC.removeEventListener(MouseEvent.CLICK, destroyShape); 
     myMC.parent.removeChild(myMC); 
     myMC = null; //THIS IS WHAT I WANT TO ACHIEVE 
    } 
} 
+0

Это дается как правильный ответ, но только потому, что ПО не знает лучше. Ваш ответ бесполезен и ничего не добивается. Любая локальная переменная является GC после запуска метода. Ваш myMC будет претендовать на GC, сворачиваете ли вы его или нет. Проголосовал, поскольку это не действительный ответ на что-либо. – BotMaster

+0

Спасибо @BotMaster, вы жемчужина! –

+0

Будьте саркастичны, как хотите, но по крайней мере попытайтесь защитить свой ответ. Правильный ответ заключается в том, что вопрос PO не имеет значения и только показывает его непонимание GC-машины. Свойство target для события будет отброшено правильно, независимо от любого действия, поэтому аннулировать его не имеет значения, даже если это было возможно.Ваш ответ также не имеет отношения к машине GC. MyMC WILL будет GC, так как это локальная переменная, аннулирование которой не имеет никакого эффекта. Поведение GC объекта, на которое он указывает, не будет затронуто. Наконец, ПО принимает ваш ответ, даже если он ничего не делает для GC. – BotMaster

0

То, что вы пытаетесь достичь (если это было возможно), ничего не достигнет с точки зрения коллекции мусора.

Если повторно отправлено событие, сбор мусора будет собран, как только будет запущен метод. Все свойства события также будут отброшены. Эта сборка мусора самого события и его свойств будет абсолютно БЕЗ ЭФФЕКТА на объект, на который они указывают, с точки зрения сбора мусора.

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

Решение, принятое, также ничего не делает. Это так же важно, как применение повязки к деревянной ноге. Любая локальная переменная в функции/методе подходит для GC сразу после запуска метода. Обнуление этих переменных не имеет никакого эффекта и не является верным ответом на любую проблему и, конечно же, не является проблемой GC. То, что эти переменные являются GC, также не является гарантией того, что объект, на который они указывают, будет GC.

Это случай, когда вопрос о несуществующей и непонятной проблеме задают и отвечают путем публикации ложного и нерелевантного решения.

Показательный пример: только объект DisplayObject, который в настоящее время отображается в списке отображения и прикреплен к этапу, имеет возможность быть объектом MouseEvent. Просто невозможно, чтобы этот объект стал доступен для сбора мусора, прежде чем он будет удален из списка отображения, к которому он принадлежит. По тем причинам, по которым объект не может претендовать на GC в момент запуска прослушивателя MouseEvent, поскольку этот объект по-прежнему имеет хотя бы одну сильную ссылку, поскольку он привязан к списку отображения. Это доказательство того, что запрос PO ошибочен, и любые примеры кода ошибочны, так как они не могут квалифицировать объект для GC в этот момент времени.

Смежные вопросы