删除对象的所有引用会删除该对象内的事件侦听器?

Tom*_*Tom 2 garbage-collection event-handling actionscript-3

当我有一个对象时,删除对它的所有引用就足以为垃圾收集器签名了,至少我听到了.例如.:

removeChild(object);
object = null;
Run Code Online (Sandbox Code Playgroud)

我仍然有点困惑,因为这是否意味着在这个对象的实例中制作的事件监听器也会被自动删除?或者我需要做什么?

Chr*_*ato 7

啊,你已经在托管代码中找到了内存管理的关键:如果你是一个对象,并且你有另一个对象的引用(即使它只是以事件监听器的形式),那么你至少在GC期间不会从内存中删除对象的一个​​原因.

对于显示对象,根据我的经验,您几乎想要订阅事件调度程序但负责该调度程序剩余的内存,您应该使用弱引用选项添加事件监听器:

myPublisher.addEventListener("myEvent", myHandlerFunction, false, 0, true);
Run Code Online (Sandbox Code Playgroud)

在我遇到的几乎所有情况中,"假,0,真"(其中true表示"使用弱引用",并且松散地翻译为"添加此侦听器,但不要让调度员不要将其作为原因"从内存中清除" - 查看文档以获取更多信息"是添加事件侦听器的正确方法.很少有教科书或文档片段出于某种原因说明这种方法,这是不幸的,因为它可以提供更直观的内存管理体验.我建议使用它作为规则而不是例外.

希望能帮助到你!