Adobeのサイトに公開された「Flash Platformのパフォーマンスの最適化」の「表示オブジェクト」の項は、DisplayObjectクラスを継承するShapeとSprite、MovieClipのオブジェクトについて、使用メモリの点から違いを比べています(なお、akihiro kamijo「Flash コンテンツパフォーマンス最適化(メモリ編 1)」参照)。その内容を、簡単にまとめてみましょう。
一般に、継承を遡るほど、機能は少なくなるものの、使用メモリも減ります。DisplayObjectと基本になるクラスの継承は、つぎのとおりです。
DisplayObjectContainer→InteractiveObject→DisplayObject→EventDispatcher
DisplayObjectクラスを継承すれば、ステージに表示して描画などの操作ができます。また、そのスーパークラスがEventDispatcherですので、基本的なイベントを受取り、リスナーに配信する機能をもちます。
さらに、InteractiveObjectを継承すると、マウスやキーボードなどのインタラクティブなイベントが扱えます。DisplayObjectContainerのサブクラスは、子のDisplayObjectインスタンスが表示リストに加えられます。
以上から、ShapeとSprite、MovieClipの3つのクラスを比べると、下表001のようになります。
表001■ShapeとSpriteおよびMovieClipクラスの比較クラス | スーパークラス | 機能 | イベント | 使用メモリ |
Shape | DisplayObject | インスタンスへの描画 | 基本 | 236 |
Sprite | DisplayObjectContainer | 子DisplayObjectインスタンスをもてる | インタラクション | 412 |
MovieClip | Sprite | タイムラインをもつ | 440 |
オブジェクトの使用メモリは、getSize()関数で調べることができます。戻り値の単位はバイトです。なお、この関数はFlash Player 9.0.115.0以降のデバッグまたはムービープレビューでのみ使えます。
trace(getSize(new Shape())); // 出力: 236[追記2011/06/07] 引用した英語版「Optimizing Performance for the Flash Platform」を日本語版に差替えました。
trace(getSize(new Sprite())); // 出力: 412
trace(getSize(new MovieClip())); // 出力: 440