2012-04-10 19 views
1

AS3アプリケーション内でガベージコレクションを実装しています。一部では、いくつかの表示オブジェクトがそうのようなループ内で作成されます。ベクター内のガベージコレクション参照変数

for(var i:uint = 0; i <= this._exampleVector.length - 1; i++) 
{ 
    this._customText = new CustomTextObject(this._exampleVector[i].playlistText), this._customTextWidth); 
    this.addChild(this._customText); 

    etc etc 

    this._customTextVector.push(this._customText); // used for ref in garbage collection 
} 

私はその後_customTextVector変数をループすることにより、私のガベージコレクションの準備を行います。

for(var i:uint = 0; i <= this._customTextVector.length - 1; i++) 
{ 
    this.removeChild(this._customTextVector[i]); 
    this._customTextVector[i].gcAllObjects(); 
    **this._customTextVector[i] = null;** 
} 

_customTextVector内の_customTextをnullにしようとすると、これは機能しません。 Vector内のインデックスのみをnullにします。これを行う方法やガベージコレクトのための別の方法についてのアイデアはありますか?

クリス

答えて

0

は、あなたのオブジェクトをGCにAS3ガベージコレクタを起こすためには

_customTextVector =null; 
+0

@kasavbereにお返事ありがとうございますが、Vector自身ではなく_customText変数をnullにしようとしています。(これもまた必要なことを理解していますが) –

0

すべてのインデックスをループした後、次の操作を行いますすることが可能です

おかげで、あなたは削除する必要がありますすべての参照(イベントリスナーを含む)次のGCパスでは、オブジェクトのメモリは解放されます。あなたが望むようにオブジェクトを直接、即座に「ヌル」する方法はありません。

メモリに問題がある場合は、this postをご覧ください。

+0

こんにちは@Sam DeHaanさん、オブジェクトを削除する必要があると思っていました。ガベージコレクションの準備をするために、それらを表示リストから削除し、イベントリスナーを削除するだけでなく、それらをnullにする必要があると思いましたか? –

+0

@ChristopherGriggこれは正しいです。プロジェクト内に他の参照がなく、イベントリスナーがない場合は、持っているもので十分です。そうでない場合は、プロジェクト内の他の参照を無効にするか変更する必要があります。イベントリスナーを削除する必要があります(弱いものであっても、必ずしも正しく機能するとは限りません)。 –

+0

それで、ループ内で作成された実際の_customTextオブジェクトをすべてnullにすることができるという元の質問に私は気付くでしょう。 –

関連する問題