Actionscript 3 现有事件侦听器是否阻止正确处理对象?

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

我有一个主班,另一个班说“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 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
}
关于你的其他问题:

  • 您没有处理objA,您只清除了一个引用 但不是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
    }