簡體   English   中英

AS3內存管理

[英]AS3 memory management

我對as3內存管理有疑問。

例如,如果我上課

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);
       }
}

我在主要課程中實例化該課程

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對象?

如您所知,垃圾回收不是一個准時的過程,只有分配了寶貴的內存后才可以進行垃圾回收。

紅線是我們允許的最大內存,然后稱為垃圾

但是關於對象的垃圾處理能力最重要的事情是,您的對象中不得保留任何與其他對象通信的處理程序,而這些處理程序將不在您的類之外。 例如,事件偵聽器必須正確刪除。

還可以看看這篇文章https://code.tutsplus.com/tutorials/understanding-garbage-collection-in-as3--active-4412

在回答您的主要問題時:
是。 您的班級將成功被垃圾收集!!

您應該在類中而不是在函數中定義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);
       }

  }

並且您需要刪除cb而不是c上的eventListener。

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

如果引用了其他類中的a和b,則最好在CustomizationScreen中將a和b設置為null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM