AS3内存管理

AS3 memory management

我有一个关于 as3 内存管理的问题。

例如,如果我有 class

public class CustomizationScreen extends MovieClip {
       private var a:Display;
       public var b:Buttons;
       public function CustomizationScreen() {
           a = new Display(200,-20);
           b = new Buttons(900,-100,"Next");
           addChild(a);
           addChild(b);
       }
}

然后我在 main class

中实例化 class
public class Main extends MovieClip {
   public var c:CustomizationScreen;
   public function Main() {
       c = new CustomizationScreen(200,-20);
       c.b.addEventListener(Event,func);
       addChild(c);
   }
   // func
}

这足以让 c 对象被垃圾回收吗?

c.removeEventListener(Event,func);
removeChild(c);
c=null;

或者我还需要从 c 中删除 a 和 b 对象吗?

如您所知,垃圾收集不是一个准时的过程,在分配了宝贵的内存之前不要完成。

The red line is our maximum allowed memory, then garbage called

但关于对象的垃圾处理能力最重要的一点是,对象中不得留下任何与 class 之外的其他对象通信的处理程序。例如事件侦听器必须正确删除。

也看看这篇文章 https://code.tutsplus.com/tutorials/understanding-garbage-collection-in-as3--active-4412

在回答您的主要问题时:
是的。您的 class 将被成功回收!!

您应该在 class 而不是函数

中定义 c
  public class Main extends MovieClip {

       private var c:CustomizationScreen;

       public function Main() {
            c = new CustomizationScreen(200,-20);
            c.b.addEventListener(Event,func);
            addChild(c);
       }

  }

并且您需要在 c.b 上删除 eventListener,而不是在 c.

public function dispose():void
{
     c.b.removeEventListener(Event,func);
     removeChild(c);
     c=null;
}

你最好在CustomizationScreen中将a和b设置为null,如果有其他人对a和b的引用class。