簡體   English   中英

將event.target設置為null

[英]Set event.target to null

我想取消垃圾收集的event.target,因為不再需要moveclip。 我粗略的是這個:

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


   }

我相信這相對簡單,但我不知道該怎么做。

謝謝

您無法更改MouseEvent.target值。 這是一個只讀屬性。 如果您的MovieClip不存在(removeChild)並且您刪除了事件處理程序mc.removeEventListener(MouseEvent.CLICK, destroy); 然后垃圾收集器會自動刪除它。

你想要實現的目標(如果它甚至是可能的話)在垃圾收集方面將無法實現。

除非重新調度,否則只要方法運行完畢,就會對事件進行垃圾回收。 該事件的所有屬性也將被丟棄。 事件本身及其屬性的垃圾收集對於他們在垃圾收集方面指向的對象絕對沒有影響。

在事件首先被調度的范圍內,對象將在事件本身被丟棄后繼續存在。 在那個范圍內,對象引用必須是無效的,而不是在事件監聽器范圍內,因為對象仍然存在於調度范圍,所以它將不起作用。

接受的解決方案也無效。 這與將綳帶應用於木腿相關。 函數/方法中的任何局部變量在方法運行后立即符合GC的條件。 對這些變量進行無效處理沒有任何效果,並且不構成對任何問題的有效答案,當然也不是GC問題。 那些變量是GC也不構成他們指向的對象將是GC的保證。

在這種情況下,通過發布錯誤且無關的解決方案來詢問和回答關於不存在和被誤解的問題的問題。

例證:只有當前位於顯示列表中且附加到舞台的DisplayObject才能成為MouseEvent的目標。 在將對象從其所屬的顯示列表中刪除之前,該對象根本不可能用於垃圾收集。 由於這些原因,當MouseEvent偵聽器運行時,該對象無法限定GC,因為該對象仍具有至少一個強引用,因為它附加到顯示列表。 這證明了PO的要求是誤導的,並且任何代碼示例都被誤導,因為它們不能在那個時間點限定GC的對象。

正如@subdan所述,任何Event的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
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM