其中一个是否比另一个更有效?
1:
A类内:
var b:B = new B();
b.addEventListener(B.TYPE1, onType1);
b.addEventListener(B.TYPE2, onType2);
b.addEventListener(B.TYPE3, onType3);
B类内:
dispatchEvent(new Event(TYPE1));
.
.
.
dispatchEvent(new Event(TYPE2));
.
.
.
dispatchEvent(new Event(TYPE3));
2:
A类内:
var b:B = new B();
b.addEventListener(CEvent.TYPE, onCEvent);
.
.
.
private function onCEvent(pEvent:CEvent):void
{
switch (pEvent.code)
{
case B.TYPE1:
onType1();
break;
case B.TYPE2:
onType2();
break;
case B.TYPE3:
onType3();
}
}
B类内:
dispatchEvent(new CEvent(TYPE1));
.
.
.
dispatchEvent(new CEvent(TYPE2));
.
.
.
dispatchEvent(new CEvent(TYPE3));
C类事件:
public class CEvent extends Event
{
public static const TYPE:String = "cEvent";
private var m_strCode:String;
public function get code():String
{
return m_strCode;
}
public function CEvent(pCode:String, bubbles:Boolean=false,
cancelable:Boolean=false)
{
super(TYPE, bubbles, cancelable);
m_strCode = pCode;
}
override public function clone():Event
{
return new CEvent(m_strCode, bubbles, cancelable);
}
}
我的理解是 #2 将比 #1 更节省时间,而现在,我需要真正努力寻找各种方法来使我的代码几乎尽可能快地运行(几乎就像在视频游戏编程)。早些时候我并没有使用第二种技术,所以需要做很多工作来整合散布在我的代码中的不同类型。我需要先询问并确保这是合理的。谢谢!
编辑
发布此消息后不久,我意识到 ActionScript 3 的事件模型因效率低下而受到批评,主要是因为每次创建事件时都会创建一个全新的对象。创建对象本身可能是一个稍微庞大的过程,因此基于一遍又一遍地创建全新对象的事件模型可能会因此而变得相当低效。
在我写这个问题的时候,我不知道这是批评的根源,或者对象创建很慢的事实,从这个角度来看,上述任何一种方法都不能真正解决问题那个问题。(方法 2 最终可能会更糟。)我不想把它作为答案,但我确实希望在这个线程上写下一点上下文。