首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Actionscript内存管理、垃圾回收

Actionscript内存管理、垃圾回收
EN

Stack Overflow用户
提问于 2011-05-04 09:59:58
回答 2查看 2.6K关注 0票数 2

This blog (和其他人)指出,在清理对象时,应该在dispose()方法中将对象引用设置为null。

但是,ActionScript3(带有Flash Player 9)使用mark and sweep为您清除循环引用。所以我想知道:真的有什么理由让你的对象引用为空吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-04 10:07:33

我从来不这样做--只要你做明显的事情:

  • 断开对对象的所有引用(从数组中删除,将存储对象的变量设置为null,从显示列表中删除)
  • 删除所有事件侦听器,如

则对象所使用的内存随时可用于覆盖。

代码语言:javascript
复制
var ar:Array = [];
var mc:MovieClip = new MovieClip();

mc.addEventListener(MouseEvent.CLICK, pants);

ar[ar.length] = mc;
addChild(mc);

if(mc.parent) mc.parent.removeChild(mc); // not garbage collected
mc.removeEventListener(MouseEvent.CLICK, pants); // still not garbage collected
ar.splice(0, 1); // finally garbage collected
票数 6
EN

Stack Overflow用户

发布于 2011-05-04 11:07:07

Grant Skinner演示文稿是对内存管理的一个精彩总结:

http://gskinner.com/talks/resource-management/

总而言之,我从不null对象本身,而是将引用它们的对象设为空(有一个细微但重要的区别)。所有对对象的引用都需要销毁,事件侦听器等也需要销毁。

添加事件侦听器时,要养成将侦听器设置为weak的习惯。

o.addEventListener(MouseEvent.CLICK, onClick, false, 0, true);

这没有缺点,这意味着如果您将所有对对象o的引用设为空,但仍然附加了侦听器,它们将自行删除,并且对象仍然可以被标记为gc‘’ed。尽管如此,您仍然应该处理您自己的侦听器的删除。

“不要偷懒--把自己清理干净!”

最后,您可以使用看门人类来帮助监视/清理您的资源:

http://gskinner.com/libraries/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5877674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档