あなたは、ムービークリップ、スプライト、文字列、数値、INT、UINT、またはブールある変数を持っている場合は、追加することによって、それは参照のremove:AS3:ガベージコレクションの変数をマークする、nullまたは削除しますか?
myVariable = null;
OR
delete(myVariable);
あなたは、ムービークリップ、スプライト、文字列、数値、INT、UINT、またはブールある変数を持っている場合は、追加することによって、それは参照のremove:AS3:ガベージコレクションの変数をマークする、nullまたは削除しますか?
myVariable = null;
OR
delete(myVariable);
設定をそれを含むオブジェクトへの参照を削除するにはnullで十分です。 delete
オペレータの構文はobject
からキーとしてmember
を除去し、そのようなものとして、それが含まれているものは何でもへの参照が削除され、delete object.member
であること
注意。
GCは一度しか発生しないことに注意してください。すべて特定のオブジェクトへの参照が削除されます。
deleteは動的オブジェクトのみを削除します。 – csomakk
使用null
削除は、動的に定義されていない変数には動作しません。
いつも覚えておいてください/決して忘れないでください。メモリをクリアしないリファレンスをnullにしています。 1つの参照を削除するだけでは必ずしも十分ではないという意味で、すべての参照を削除する必要があります。
例:Bはもう存在していない間
var a:Object = {};
var b:Object = {};
a.name = "Alpha";
a.o = b;
b.name = "Beta";
b.o = b;
trace(b.name);
trace(a.o.name);
b = null;
trace(a.o.name);
trace(b.name);
、(以前にb
としても知られているオブジェクトである)a.o周り依然としてあります。
注意!
a.o = nullを実行する必要がありますか? bをクリアするには?またはa = nullになります。十分ですか? – bunnybare
はい、データ構造ではなくポインタとしてオブジェクト変数を考えます。データ構造はメモリ内にあり、すべての参照が削除されるまでそこに存在します。ポインタが存在しない場合、次のガベージコレクションサイクルでデータが消去されます – Daniel
この種の割り当てを行うのは、決してこれを直接行うのではなく、この割り当てを処理する関数を使用することです。関数はどのオブジェクトが接続されているかに関する情報を格納し、destroy関数が呼び出されるとすべての参照が削除されます。 casaLibがどのようにそれを行うのかを見てください。http://as3.casalib.org/docs/org_casalib_display_CasaMovieClip.html コードはイベントリスナーを管理するものですが、そのアイデアは同じです。オブジェクトを追跡して破棄関数内にドロップしてください – Daniel
ASはわかりませんが、ASが「ガベージコレクション」という用語を誤って誤用しない限り、どちらか一方を必要としません(他のGCの言語については多くの類似の質問を参照してください)。 – delnan
私の質問を編集しました、ありがとうございます。 – redconservatory