2011-01-28 6 views
2

あなたは、ムービークリップ、スプライト、文字列、数値、INT、UINT、またはブールある変数を持っている場合は、追加することによって、それは参照のremove:AS3:ガベージコレクションの変数をマークする、nullまたは削除しますか?

myVariable = null; 

OR

delete(myVariable); 
+1

ASはわかりませんが、ASが「ガベージコレクション」という用語を誤って誤用しない限り、どちらか一方を必要としません(他のGCの言語については多くの類似の質問を参照してください)。 – delnan

+0

私の質問を編集しました、ありがとうございます。 – redconservatory

答えて

4

設定をそれを含むオブジェクトへの参照を削除するにはnullで十分です。 deleteオペレータの構文はobjectからキーとしてmemberを除去し、そのようなものとして、それが含まれているものは何でもへの参照が削除され、delete object.memberであること

注意。

GCは一度しか発生しないことに注意してください。すべて特定のオブジェクトへの参照が削除されます。

+0

deleteは動的オブジェクトのみを削除します。 – csomakk

4

使用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周り依然としてあります。

注意!

+0

a.o = nullを実行する必要がありますか? bをクリアするには?またはa = nullになります。十分ですか? – bunnybare

+1

はい、データ構造ではなくポインタとしてオブジェクト変数を考えます。データ構造はメモリ内にあり、すべての参照が削除されるまでそこに存在します。ポインタが存在しない場合、次のガベージコレクションサイクルでデータが消去されます – Daniel

+1

この種の割り当てを行うのは、決してこれを直接行うのではなく、この割り当てを処理する関数を使用することです。関数はどのオブジェクトが接続されているかに関する情報を格納し、destroy関数が呼び出されるとすべての参照が削除されます。 casaLibがどのようにそれを行うのかを見てください。http://as3.casalib.org/docs/org_casalib_display_CasaMovieClip.html コードはイベントリスナーを管理するものですが、そのアイデアは同じです。オブジェクトを追跡して破棄関数内にドロップしてください – Daniel

関連する問題