簡単な答えです。はい、イベントは常に複製されます。ドキュメントを参照して確認してください。
私の最初の答えは間違っていました。イベントは常に複製されるとは限りません。@weltraumpirat が指摘したように、ドキュメントによると、これはイベントを手動で再ディスパッチした場合にのみ発生します。アドビがこれを行うクラス (存在する場合) がいくつあるかを知ることは不可能ですが、一部のクラスがそうする可能性はあります。それでも、「常に複製される」という私の答えは間違っていました。
ただし、イベントがパフォーマンスの問題ではないという意味ではありません。既存のイベントを再ディスパッチした場合にのみ複製されますが、そうでない場合でも新しいインスタンスとしてディスパッチされます。これはとにかく clone メソッドが行っていることとまったく同じです。
最後に、Tamarin のソース コード、具体的には globals.as でdispatchEvent
メソッドの実装を確認できます。
public function dispatchEvent(event:Event):Boolean {
if (event.target && event.target!=null) {
return dispatchEventFunction (event.clone());
} else {
return dispatchEventFunction (event);
}
}
ご覧のとおり、特定のイベント プロパティが設定されているかどうかに基づいて、ここで複製が行われます。ターゲット プロパティが設定されるコードはまだ見つかりませんが、いずれにせよ、そこにはあります。clone メソッドは、既存のイベントが再ディスパッチされた場合にのみ呼び出されます (少なくとも私たちが見ることができるものから)。私は訂正します。:)
余談ですが、これは Flash Player の大きな欠陥だと思います。アドビはこれを VM の特別なケースにするべきでした。特に AVM2 の基本設計がイベント駆動型システムであることを考えると、イベントがどこかで必要になるたびにクローンを作成するのではなく、内部的に渡されるポインターにすぎません。 .