Actionscript 3 如何删除动作脚本3中的内容
我试图从内存中删除简单对象,但当我调用removeChildren memory usage rose://时,我不知道为什么?如何移除对象Actionscript 3 如何删除动作脚本3中的内容,actionscript-3,memory-leaks,Actionscript 3,Memory Leaks,我试图从内存中删除简单对象,但当我调用removeChildren memory usage rose://时,我不知道为什么?如何移除对象 package { import flash.display.DisplayObject; import flash.display.SimpleButton; import flash.display.Sprite; import flash.events.Event; import flash.events.Ke
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
{
}
}
}
包{
导入flash.display.DisplayObject;
导入flash.display.SimpleButton;
导入flash.display.Sprite;
导入flash.events.Event;
导入flash.events.KeyboardEvent;
导入flash.system.system;
公共类Main扩展了Sprite{
公共功能Main()
{
对于(变量i:int=0;i<1000;i++){
var addBouncerButton:SimpleButton=newsimplebutton();
addBouncerButton.x=100;
addBouncerButton.y=10;
addBouncerButton.name=“Btn”+i;
addChild(addBouncerButton);
}
stage.addEventListener(Event.ENTER\u FRAME,update);
stage.addEventListener(KeyboardEvent.KEY_向下,移除);
}
私有函数移除(e:键盘事件):无效
{
trace(“Children:+this.numChildren”);
跟踪(System.totalMemory*1024+“kb”);
如果(this.numChildren>0)
变量o:DisplayObject=removeChildAt(this.numChildren-1);
o=零;
}
私有函数更新(事件:事件):无效
{
}
}
}
您可以使用delete关键字将对象排队进行垃圾收集。不过,这个垃圾收集器可能需要一段时间(几毫秒)来完成它的工作,并且不应该有对对象的后续引用
为了更好地理解as3 GC,您可以阅读这篇优秀的文章:
祝你好运 删除对对象的所有引用,例如,如果您有eventlisteners,请删除这些引用并将对象设置为null。垃圾收集器将在您不必担心的时候为您清理该对象。当不再有对该对象的任何引用时,对象将被垃圾收集。然而,仅仅因为没有留下任何引用,并不意味着它将立即被垃圾收集;这只会在某个时候发生。恐怕你对“删除”的理解是错误的“删除”用于从对象和字典中删除动态创建的属性,例如条目(和键)。您应该确保删除对该对象的所有引用,as3gc将拾取它们。阅读本文以更好地理解as2/3删除差异