これらの1つは、他よりも特に効率的ですか?
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));
クラスCEvent:
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よりもはるかに時間効率が高く、今のところ、コードを可能な限り高速に実行するためのさまざまな方法を見つけることに真剣に取り組む必要があります(ほぼビデオゲームプログラミング)。ただし、以前は2番目の手法を使用していなかったため、コード全体に散らばっているさまざまなタイプを統合するために多くの作業が必要になります。私は最初に尋ねて、これが中途半端に合理的であることを確認する必要があります。ありがとう!
編集
これを投稿してしばらくして気付いたのは、ActionScript 3のイベントモデルは、イベントが作成されるたびに新しいオブジェクトが作成されるという事実を主な理由として非効率であると批判されていることです。オブジェクトの作成は、それ自体が少しかさばるプロセスになる可能性があるため、まったく新しいオブジェクトの作成に基づくイベントモデルは、その直接的な結果としてかなり非効率になりがちです。
この質問を書いたとき、これが批判の原因であることに気づかなかったし、オブジェクトの作成が遅いという事実に気づかなかったので、それを考慮に入れると、上記のアプローチのどちらも実際にはうまく回避できませんでしたその問題。(アプローチ2は、おそらく最終的にはもっと悪いでしょう。)答えとしてそれを書き留めたくはありませんが、このスレッドにその少しのコンテキストを書き留めてほしいと思います。