2011-02-15 83 views
0

您是否必須刪除具有本地範圍的變量的事件偵聽器?通過這個我的意思是...如果變量只存在,只要函數/方法正在運行,事件監聽器是否仍然存在?刪除局部變量的事件偵聽器?

private function startSomething():void 
     { 
      whatever.start(); 
      var t:Timer = new Timer(2000,1); 
      t.addEventListener(TimerEvent.TIMER, stopSomething, false, 0, true); 
      t.start(); 
     } 

private function stopSomething(e:TimerEvent):void 
     { 
      // do you have to remove the event listener here?? 

     } 

回答

3

由於定時器只會觸發一次,因此無需刪除偵聽器。

+0

我確實有一個相關的問題(上面添加了詳細信息)...如果變量只存在於第一個方法內部,我是否必須擔心爲該變量除去事件偵聽器? – redconservatory 2011-02-15 17:24:18

+0

對於定時器,即使定時器變量超出範圍,事件偵聽器也是有效的。定時器事件在函數執行結束並且變量超出範圍之後觸發。所以,如果這是重複的,那麼當你不再需要的時候,你應該按照Simsoft的答案中指定的方法移除監聽器。但是如果定時器不重複,那就沒有必要。顯示對象也一樣。假設你已經在現有的顯示對象上添加了一個按鈕。按鈕變量是本地的,但由於按鈕存在於將監聽事件的顯示對象上。希望能幫助到你。 – taskinoor 2011-02-15 17:38:47

3

如果你真的需要做到這一點,你可以這樣做:

Timer(e.currentTarget).removeEventListener(TimerEvent.TIMER, stopSomething);

幾乎所有的活動對象/ currentTarget當前的屬性是指觸發對象。