作者hurst05 ()
看板Flash
标题[问题] 移除函式内监听器的问题
时间Wed Dec 11 11:04:08 2013
大家好,最近在做监听管理的时候,遇到了一个问题。概要如下
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需要之外,根本没有用途。
想请问各位这种情形,有何方法可以处理函式中的监听器,或是有其他观念上的选择?
谢谢大家~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.248.193
※ 编辑: hurst05 来自: 59.120.248.193 (12/11 11:05)
1F:→ KawasumiMai:记忆体什麽的....简单的说因为test_listener放在 12/11 15:32
2F:→ KawasumiMai:testListener里面所以每次创的都是一个分身function 12/11 15:32
3F:→ KawasumiMai:拉到外面是为了跟testListener隔开并且统一化 12/11 15:33
4F:→ KawasumiMai:就算只有一两个用途但是只要能共通,写成function不会 12/11 15:34
5F:→ KawasumiMai:是什麽坏事,你也可以全部指定到一个function作swith 12/11 15:34
6F:→ KawasumiMai:让那个function趋向万能化,不能说你写出来的function 12/11 15:35
7F:→ KawasumiMai:没用途啊= =,没用途干嘛监听,如果只有一个地方用得 12/11 15:35
8F:→ KawasumiMai:到,不如直接拆进去就好了? 12/11 15:36
9F:→ hurst05:感谢,我思考看看~ 12/12 09:27