看着你的代碼,我一定會推薦。除非您共享的代碼只運行一次,否則您很可能會發生內存泄漏。
將事件偵聽器添加到對象時,該事件偵聽器會將該對象保留在內存中,即使它已準備好進行垃圾回收(不再使用)。當你用一個匿名函數添加一個事件監聽器(這大概是從Proxy.add
返回的,那麼你就沒有簡單的方法去除事件監聽器了,做d.removeEventListener(MouseEvent.CLICK, Proxy.add(this, click, d))
不會工作,因爲Proxy.add每次都返回一個新的/不同的函數因爲即使代碼方面它與添加偵聽器時相同,因爲返回的對象/函數是不同的,它不會實際刪除偵聽器。
您可以將true
傳遞給弱標誌(第5個參數)當你添加你的聽衆時:
d.addEventListener(MouseEvent.CLICK, Proxy.add(this, click, d), false, 0, true);
這告訴FlashPlayer忽略偵聽器時,找出哪些對象fr記憶中的ee。雖然這會減少你的內存泄漏的可能性,但它仍然不是一個很乾淨的方式。儘管總是使用弱標誌是一種很好的做法,或者在不再需要時總是明確地刪除聽衆。
作爲評價和對方的回答提到了,你其實並不需要使用您的代理類,下面將完成你想要什麼:
d.addEventListener(MouseEvent.CLICK, click, false, 0, true);
private function click(event:MouseEvent):void {
Animate.fadeOutIn(event.currentTarget as Sprite);
//event.currentTarget is a reference to the Object that you attached the listener to
//event.target is the object that actually dispatched the event, which could be the same as event.currentTarget, or a child of it
}
你可以添加一個超級簡單的例子來你的問題,其中將包含你想使用的類結構 –
我添加了一個例子。 – seventeen
在你的例子中,你並不需要將'elem'傳遞給函數。你可以從'event.currentTarget'或'event.target'獲取它。 –