垃圾收集最佳实践

时间:2010-02-21 21:49:16

标签: actionscript-3 garbage-collection

如果您要从显示列表中删除MovieClip,并且该MovieClip又有子MovieClip,它们有自己的事件侦听器,是否有必要从子MovieClip中删除所有侦听器?

或只是直接从显示列表中删除的父MovieClip?

2 个答案:

答案 0 :(得分:3)

这取决于监听器附加到父级或子级MovieClip,是否具有指向它的弱引用。

添加侦听器时,可以使用最后一个参数来设置侦听器是否使用弱引用。对于您提出的问题,这正是您需要知道的。

//This listener will use a weak reference, notice the last "true"
something.addEventListener("event", myFunction, false, 0, true);
//This is called a weak reference listener.
//The ussual listener, with default parameters, is a strong refence listener.

EventDispatcher Reference

因此,如果删除了对此类对象的所有引用,则会对对象进行垃圾回收。添加了默认参数的监听器会计入这些引用(因为最后一个参数的默认值为false)。因此,如果MovieClip附加了强大的引用侦听器或其任何子节点,则通过从显示列表中删除它,剪辑将不会被垃圾收集,直到侦听器引用也被删除(通过使用removeEventListener方法)

如果您在剪辑或其任何子节点中使用弱引用,则通过从显示列表中删除它,它最终将被垃圾收集。请记住,这可能会在一段时间后发生,因此可能会触发并调用ENTER_FRAME之类的事件,直到最终收集对象为止。

答案 1 :(得分:-1)

我认为已经足够removeChild(MC),然后MC = null或者删除MC,我想删除会做你从Adobe读取规范的工作ID,我想你也可以调用System.gc但是这个用于AIR应用