Actionscript 3 现有事件侦听器是否阻止正确处理对象?
我有一个主班,另一个班说“a” 我从主类创建类A的对象。我也会妥善处理这些物品。在类A中,我为Stage添加了一个事件监听器,但在处理类A的对象时忘记删除它。每次我从主类创建类A的对象时,舞台上的侦听器都会增加。侦听时执行的函数使用对象的“z”和“y”变量 以下是我使用的步骤:-Actionscript 3 现有事件侦听器是否阻止正确处理对象?,actionscript-3,memory-management,memory-leaks,event-listener,destroy,Actionscript 3,Memory Management,Memory Leaks,Event Listener,Destroy,我有一个主班,另一个班说“a” 我从主类创建类A的对象。我也会妥善处理这些物品。在类A中,我为Stage添加了一个事件监听器,但在处理类A的对象时忘记删除它。每次我从主类创建类A的对象时,舞台上的侦听器都会增加。侦听时执行的函数使用对象的“z”和“y”变量 以下是我使用的步骤:- 1) I create an object say "objA" of Class A; Stage has 1 event listener. 2) I dispose "objA"; but Sta
1) I create an object say "objA" of Class A; Stage has 1 event listener.
2) I dispose "objA"; but Stage still has 1 event listener.
3) I create another object say "objB" of Class A; Stage now has 2 event Listeners.
4) I dispatch the event to trigger functionToBeTriggered; Now 2 function are triggered one of objA and another of objB; I got 'z' and 'y' of both objA and objB
以下是我的疑问:-
1) As I have disposed objA before creating objB ie. I did objA = null; how did i get the value of 'z' and 'y' of objA?
2) Is an active Listener preventing me from proper disposal of object?
3) How do I clear references of primitive data types like int and String etc ?
我希望我已清楚地表达了我的问题。请提供帮助。通过调用addEventListener,您可以防止实例超出范围并被销毁。通过谷歌搜索“as3垃圾收集”或类似网站了解更多信息。因此,您需要删除对实例的引用 一般经验法则:每次执行“addEventListener”时,都应该确保有一个合适的“removeEventListener” 基本示例:
public class A
{
public function A()
{
Stage.addEventListener(eventString, functionToBeTriggered);
}
function cleanup():void
{
Stage.removeEventListener(eventString, functionToBeTriggered);
}
}
public class Foobar
{
var a = new A();
a.cleanup(); //by omitting this line, the instance 'a' cannot be garbage collected due to Stage holding a reference to that instance
}
关于你的其他问题:
谢谢你,丹尼尔。我知道我必须删除事件侦听器。由于我的粗心,我得到了错误,我想我应该打电话给removeEventListener。但让我困惑的是,我从一件我处理过的物品中得到的价值。再一次感谢你的回答。
public class A
{
public function A()
{
Stage.addEventListener(eventString, functionToBeTriggered);
}
function cleanup():void
{
Stage.removeEventListener(eventString, functionToBeTriggered);
}
}
public class Foobar
{
var a = new A();
a.cleanup(); //by omitting this line, the instance 'a' cannot be garbage collected due to Stage holding a reference to that instance
}