Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionpackage { import flash.display.Shape; import flash.display.Sprite; import flash.events.*; public class Testeur extends Sprite { private var rectangle:Shape; public function Testeur() { addEventListener(Event.ADDED_TO_STAGE, active); } private function active (evt:Event):void { removeEventListener(Event.ADDED_TO_STAGE, active); addEventListener(Event.REMOVED_FROM_STAGE, destruct); rectangle = new Shape(); rectangle.graphics.beginFill(0x0055FF); rectangle.graphics.drawRect(50,50,1200,1200); rectangle.cacheAsBitmap = true; addChild(rectangle); } private function destruct (evt:Event):void { removeEventListener(Event.REMOVED_FROM_STAGE, destruct); removeChild(rectangle); } } }
rectangle = null;
La meilleure des manière pour optimiser votre application et supprimer les références qui empêchent le Garbage Collector de supprimer des objets de la mémoire reste encore de supprimer les eventListener et mettre ses propriétés membres à null dans une méthode qui serait appelée juste avant la destruction de l'objet.
Par exemple, vous pouvez rajouter dans votre objet une méthode destroy:
private function destroy():void{ myEventDispatcher.removeEventListener("eventName", eventHandler); myEventDispatcher = null; myProperty = null; ... }
donc le passage à "null" fait un "remove" aussi.
var myClip:Cliper = new Cliper(); // Liaison bibliotheque addChild(myClip); myClip = null;
Et si tu ne fais pas de removeChild(rectangle) ?
Et ce que l'instance de Testeur et virer de la memoire ? sans null ? et rectangle qui est a l'interieur ? sans null ?
package { import flash.events.*; public MyClass extends Movieclip() { private var myClip:Sprite; public function MyClass() { myClip = new Sprite(); addChild(myClip); myClip.addEventListener(MouseEvent.CLICK, clicking); } } }
var _inst:MyClass = new MyClass(); addChild(_inst);
var objClip:Sprite = inst.myClip
package { import flash.display.Shape; import flash.display.Sprite; import flash.events.*; public class Testeur extends Sprite { public var rectangle :Shape; public function Testeur() { addEventListener(Event.ADDED_TO_STAGE, active); } private function active (evt:Event):void { removeEventListener(Event.ADDED_TO_STAGE, active); addEventListener(Event.REMOVED_FROM_STAGE, destruct); rectangle = new Shape(); rectangle.graphics.beginFill(0x0055FF); rectangle.graphics.drawRect(50,50,1200,1200); rectangle.cacheAsBitmap = true; //ajoute le rectangle dans la liste d'affichage addChild(rectangle); //on passe la variable à null, //mais le rectangle existe toujours en mémoire, le GC ne le prends pas. //l'objet peut exister sans variables dans la liste d'affichage rectangle = null; //a partir de là, le seul moyen d'accéder au rectangle //pour l'éliminer et le rendre eligible au GC //c'est d'utiliser les methodes "getChild" des displayObjectContainer removeChild(this.getChildAt(0)); //Le rectangle est effacé de la liste, //La mémoire est liberée au passage du GC } private function destruct (evt:Event):void { removeEventListener(Event.REMOVED_FROM_STAGE, destruct); } }