[问题] 移除函式内监听器的问题

楼主: hurst05   2013-12-11 11:04:08
大家好,最近在做监听管理的时候,遇到了一个问题。概要如下
private function testListener(create:Boolean):void
{
//temp is a Container
if (create)
{
temp.addEventListener('testEvent',test_listener);
}
else
{
temp.removeEventListener('testEvent',test_listener);
}
function test_listener(event:Event):void
{
trace('Hello');
}
}
这样的一个method 简单处理事件的监听与移除
然而看完可能就有大大发现了,这个监听是不会被移除掉的!
我有google了一下大概原因,
主要应该是test_listener这个method在我监听和移除时,flash对应的内存位置是不同
所以无法正确移除,最简单的处理方式,可以将test_listener移至testListener外部
private function test_listener(event:Event):void
{
trace('Hello');
}
如此可正常移除,但是这种method除了testListener需要之外,根本没有用途。
想请问各位这种情形,有何方法可以处理函式中的监听器,或是有其他观念上的选择?
谢谢大家~
作者: KawasumiMai (さあ、死ぬがいい)   2013-02-11 15:32:00
内存什么的....简单的说因为test_listener放在testListener里面所以每次创的都是一个分身function拉到外面是为了跟testListener隔开并且统一化就算只有一两个用途但是只要能共通,写成function不会是什么坏事,你也可以全部指定到一个function作swith让那个function趋向万能化,不能说你写出来的function没用途啊= =,没用途干嘛监听,如果只有一个地方用得到,不如直接拆进去就好了?
楼主: hurst05   2013-02-12 09:27:00
感谢,我思考看看~

Links booklink

Contact Us: admin [ a t ] ucptt.com