2

関数を直接呼び出すことができる場合、このような独自のイベントを作成する用途は何ですか。

例えば

var customEvent:Event = new Event("ev");
_myObject.addEventListener("ev", handler);

private function handler(e:Event):void
{
    //Do something
}

//And then dispatching the event else where like this
_myObject.dispatchEvent(customEvent);

このように関数を直接呼び出すことができる場合

handler();
private function handler():void
{
//do something
}

カスタムイベントのポイントは何ですか? この状況では、効率とリソース消費を最小限に抑えるために、どちらを使用する必要がありますか?

4

2 に答える 2

7

イベントをディスパッチする場合、「ディスパッチャ」はリスナーについて何も知る必要はありません。リスナーが存在しない可能性もあります。

関数を直接呼び出す場合は、関数の名前を知っている必要があり、関数を実装するオブジェクトへの参照を持っている必要があります。コードの再利用が難しくなります。

于 2013-02-25T17:14:33.993 に答える
0

効率の観点から、そして私の正直な意見では、保守性の観点から、直接メソッド呼び出しを優先する必要があります。

イベントはより一般的で、通常はパブリッシュ/サブスクライブパターンに使用されます。イベントベースのシステムはどの言語でもかなり簡単に作成でき、ディスパッチできる各イベントのサブスクライバーのリストを維持する必要があります。このリストは、すべてのサブスクライバーを呼び出してチェックおよびトラバースする必要があります。これは、通常、辞書またはその他のデータ構造を使用してかなり効率的に実行できます。

一貫したメッセージング パターンに固執する場合、イベントは GUI 表現からロジックを抽象化するのに役立ちます。C#、AS3、Objective-C などの多くの言語は、イベントを使用して GUI システムと統合します。

一般に、より一般的な動的ディスパッチ メカニズムを優先してコンパイル時間のチェックが失われるため、プロジェクトのサイズが大きくなると、メッセージ システムの保守が難しくなる可能性があります。

于 2013-02-25T17:17:40.503 に答える