[英]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.