2012-04-10 4 views
1

Ich bin Garbage Collection innerhalb einer AS3-App implementieren. In einem Teil, werden mehrere Anzeigeobjekte innerhalb einer Schleife erzeugt, so wie:Garbage Collection Referenzvariable innerhalb eines Vector

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 
} 

ich meine Speicherbereinigungs Vorbereitung Führen dann durch die variable _customTextVector durch Looping.

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

Wenn ich versuche, die _customText im _customTextVector null zu machen, das funktioniert nicht. Es macht den Index nur innerhalb des Vektors null. Irgendwelche Ideen, wie man dies oder eine andere Methode zur Müllsammlung macht?

Dank

Chris

Antwort

0

Ist es möglich, nach dem folgenden zu tun alle Indizes Schleifen

_customTextVector =null; 
+0

Danke für Ihre Antwort @kasavbere, aber ich versuche, die Variable _customText Null zu machen, anstatt den Vektor selbst (obwohl ich verstehe, dass auch getan werden muss) –

0

Um die AS3-Garbage-Collector zu führen, dass Ihre Objekte GC, müssen Sie entfernen alle Verweise auf sie (einschließlich Ereignis-Listener). Beim nächsten GC-Durchlauf wird der Speicher des Objekts freigegeben. Es gibt keine Möglichkeit, ein Objekt direkt, sofort "Null", wie Sie wollen. Wenn Sie Probleme mit dem Speicher haben, werfen Sie einen Blick auf this post.

+0

Hallo @Sam DeHaan, ich verstehe, Sie können nicht sofort null Objekte, aber ich dachte, Sie müssen sie Null, sowie sie aus der Anzeigeliste entfernen und Ereignislistener entfernen, um sie für die Garbage Collection vorzubereiten? –

+0

@ChristopherGrigg Das ist richtig. Wenn Sie in Ihrem Projekt keine weiteren Referenzen und keine Ereignis-Listener haben, reicht das, was Sie haben. Wenn nicht, müssen Sie andere Referenzen in Ihrem Projekt aufheben oder ändern und sicherstellen, dass Ereignis-Listener entfernt werden (selbst schwache funktionieren nicht immer richtig). –

+0

Das bringt mich zu der ursprünglichen Frage, wie kann ich alle tatsächlichen _customText Objekte null machen, die innerhalb der Schleife erstellt werden, vielleicht könnte ich es besser formuliert haben! –