我将一个空的movieclip(通过addChild)加载到一个库对象(一个扩展MovieClip类的MyObject类的movieclip)。在某些时候,从主要我删除它的父自定义movieclip,我设置任何引用null以完全销毁它。问题:如果在自定义movieclip类中有eventListeners,该怎么办?当我销毁对象时它们被删除了吗?我应该在删除对象之前写一个方法来删除它们吗?
答案 0 :(得分:1)
理想情况下,如果您尝试将其销毁以进行垃圾收集,则应清理对象中的所有内部引用。你也可以使用弱引用来创建你的侦听器,通过将第五个参数传递为true
来使它们自动销毁,但我个人建议不要使用弱引用并养成手动清理的习惯。
//setting a weak referenced listener
foo.addEventListener(Event.WHATEVER,bar(),false,0,true);
答案 1 :(得分:1)
您必须删除所有事件侦听器(或者如果您是懒惰的,在添加事件侦听器时使用弱引用),或者仍然会有对该对象的内部引用,以防止垃圾收集器收集它。
答案 2 :(得分:1)
我在我编写的每个类中都包含了某种类型的destroy()
方法。此方法负责该类中任何子对象的所有实例或引用。这包括任何监听器,显示列表引用等。然后,在我去删除/ null之前,我调用它的destroy()
方法来确保正确的GC并避免内存泄漏。请注意,如果需要,这可以链接深层嵌套的对象。
你可以只使用弱引用并删除整个对象。 ASVM2通常足够智能,可以正确地杀死子对象 BUT 这个GC管理很差,而且你只是要求内存泄漏。
我的$ .02。