0

ActionScript3 を使用して Web およびモバイル ゲームを開発しています。メモリは私の最大の敵です。いくつかのオブジェクトの詳細な寿命は常にわかりません。例: Bitmap bitmapData の "dispose" 関数があることは知っています。なのでいつも「bitmap.bitmapData.dispose」でビットマップオブジェクトを破棄しています。ただ、bitmap オブジェクトの参照が 0 になった場合、dispose 関数を呼び出さなくても、このオブジェクトが使用しているメモリは GC によって解放されるのでしょうか。

上記のような質問が多すぎます (サウンド、テクスチャ、ベーステクスチャ...)。誰かがこのトピックについていくつかのアイデアを持っていますか?

4

1 に答える 1

0

オブジェクトの寿命は、1 つのことによって決定されます。オブジェクトがどこからも参照されなくなった場合、そのオブジェクトは死んでいる (孤立している) と見なされ、メモリから削除される対象になります。そうです、BitmapData オブジェクトdispose()へのすべての参照を削除すると、明示的な呼び出しがなくても、BitmapData オブジェクトはメモリから削除されます。

サウンドまたはテクスチャ オブジェクトについて - これらは再利用するのが最適です。たとえば、mySound.play()複数回呼び出すことができます。これSoundChannelにより、参照されていない場合、有効期間がサウンドの持続時間である別のオブジェクトが生成されます。同様に、同じ Texture オブジェクトを使用して、テクスチャリングされているものの複数のインスタンスを持つことができます。

を拡張するクラスには特別なルールがあります。これらのクラスはEventDispatcherイベントをリッスンできるためです。そのオブジェクトへの弱参照を使用しない場合、イベント リスナーがインスタンスに直接アタッチされるため、効果的に禁止する追加の参照リンクが作成されます。そのオブジェクトによって占有されているメモリのリサイクルからの GC。したがって、少なくともこの目的のためには、常にすべての強参照リスナーを完全に制御する必要があります。

お役に立てれば。

于 2013-03-13T05:34:33.547 に答える