public class MyButton extends Sprite
{
public function MyButton(defaultHandler:Function)
{
addEventListener(MouseEvent.CLICK, defaultHandler);
}
}
//主類AS3:會造成內存泄漏嗎?
var myButton:MyButton =new MyButton(someFunction);
addChild(myButton)
removeChild(myButton);
myButton = null;
IE我從內到我的Button類添加一個匿名鼠標點擊事件處理函數,它在建造時,並沒有明確刪除它時,它從臺上撤下來,並無效。
此對象是否符合垃圾回收器的條件,是否會造成內存泄漏?或者因爲事件監聽器只引用一個本身被刪除的對象,它也會被刪除?
當設置一個監聽器是軟弱的,去除的責任是轉移到垃圾收集器。你不應該信任GC,因爲它大多是隨機的,所以可能需要一段時間。弱聽者是懶惰的開發人員,他們不負責清理自己的代碼。唯一的例外可能是舞臺上的事件監聽者,但你應該總是自己移除監聽者。 –
同意@MarkKnol,我總是明確地刪除它們。這就是說,這不是OP所要求的。 – sberry
我發現這是一個稍微不同的場景,但有類似的問題: http://stackoverflow.com/questions/8471578/would-this-code-cause-memory-leakage 其中有一個引用: 「事件偵聽器不會自動從內存中移除,因爲只要派發對象存在**,垃圾收集器就不會刪除偵聽器**(除非useWeakReference參數設置爲true)。」 - 所以根據這個,如果監聽器引用的對象不再存在,它不應該**持續存在並且不應該引起泄漏 - 任何人都可以證實這一點嗎? –