看着你的代码,我一定会推荐。除非您共享的代码只运行一次,否则您很可能会发生内存泄漏。
将事件侦听器添加到对象时,该事件侦听器会将该对象保留在内存中,即使它已准备好进行垃圾回收(不再使用)。当你用一个匿名函数添加一个事件监听器(这大概是从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'获取它。 –