首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3内存管理

AS3内存管理
EN

Stack Overflow用户
提问于 2016-11-01 15:01:16
回答 2查看 93关注 0票数 1

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

例如,如果我有课

代码语言:javascript
复制
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);
       }
}

我在主类中实例化了这个类

代码语言:javascript
复制
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对象被垃圾收集?

代码语言:javascript
复制
c.removeEventListener(Event,func);
removeChild(c);
c=null;

还是也需要从c中移除a和b对象?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-01 23:43:24

正如您应该知道的,垃圾收集不是一个及时的过程,在分配有价值的内存之前是不会完成的。

红线是我们允许的最大内存,然后是垃圾

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

还请看一看本文https://code.tutsplus.com/tutorials/understanding-garbage-collection-in-as3--active-4412

在回答你的主要问题时:

是。你的班级将成功垃圾收集!

票数 1
EN

Stack Overflow用户

发布于 2016-11-02 02:06:27

您应该在类中而不是在函数中定义c。

代码语言:javascript
复制
  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,而不是c上删除eventListener。

代码语言:javascript
复制
public function dispose():void
{
     c.b.removeEventListener(Event,func);
     removeChild(c);
     c=null;
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40362728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档