2010-09-09 5 views
0

J'essaie de supprimer des objets simples de la mémoire, mais quand j'appelle removeChildren l'utilisation de la mémoire a augmenté:/Et je ne sais pas pourquoi? Et comment puis-je supprimer des objets?Comment supprimer quelque chose dans Action Script 3

package { 
    import flash.display.DisplayObject; 
    import flash.display.SimpleButton; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.KeyboardEvent; 
    import flash.system.System; 

    public class Main extends Sprite { 

     public function Main() 
     { 
      for (var i:int = 0 ; i < 1000;i++) { 
       var addBouncerButton:SimpleButton = new SimpleButton(); 
       addBouncerButton.x = 100; 
       addBouncerButton.y = 10; 
       addBouncerButton.name = "Btn"+i; 
       addChild(addBouncerButton); 
      } 
      stage.addEventListener(Event.ENTER_FRAME, update); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, remove); 
     } 

     private function remove(e:KeyboardEvent):void 
     { 
      trace("Children : " + this.numChildren); 
      trace(System.totalMemory * 1024 + " kb"); 
      if(this.numChildren > 0) 
       var o:DisplayObject = removeChildAt(this.numChildren - 1); 
      o = null; 
     } 

     private function update(event:Event):void 
     { 
     } 
    } 
} 
+1

Les objets sont susceptibles d'être collectés lorsqu'il n'y a plus de référence à cet objet. Cependant, juste parce qu'il n'y a plus de références, cela ne veut pas dire que les ordures seront collectées immédiatement; cela arrivera juste à un moment donné. – poke

Répondre

2

Vous pouvez utiliser le mot-clé delete pour mettre votre objet en file d'attente pour la récupération de place. Ce garbage collector peut prendre un certain temps (quelques ms) pour faire son travail, et il ne devrait pas y avoir de références à vos objets.

Pour une meilleure compréhension de AS3 GC vous pouvez lire cet excellent article: http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html

Bonne chance!

+0

J'ai peur que vous vous trompiez à propos de 'supprimer'. 'delete' est utilisé pour supprimer les propriétés créées dynamiquement, telles que les entrées (et les clés) des objets et des dictionnaires Object. –

+0

Bien sûr, @Juan a raison, j'ai mélangé as2 et as3. Vous devez vous assurer de supprimer toutes les références à l'objet et l'as3gc les récupérera. Lisez cet article pour une meilleure compréhension des différences de suppression as2/3 http://www.gskinner.com/blog/archives/2006/06/understanding_t.html – Johan

0

Supprimez toutes les références à un objet. Par exemple, si vous avez des écouteurs d'événements, supprimez-les et définissez l'objet sur null. Le garbage collector nettoie alors cet objet pour vous un certain temps vous n'avez pas besoin de s'inquiéter à ce sujet.

Questions connexes