如何使Flex / ActionScript 3对象符合垃圾收集条件?

时间:2009-11-12 18:21:05

标签: flex actionscript-3 garbage-collection

如何使Flex / ActionScript 3对象符合垃圾回收的条件?拇指规则是什么? ...如果在其他地方得到回答,我会道歉。

5 个答案:

答案 0 :(得分:4)

垃圾收集器here

上的

信息

一堆更多信息here

答案 1 :(得分:3)

基本上,您需要删除所有对象事件侦听器并删除对它的所有引用,使其对应用程序的其余部分完全不可用。

删除事件侦听器对于*.removeEventListener(event type, function)非常有用,并且使用delete(varName)删除引用。

执行上述操作大部分时间都会正常工作,但仍有一些情况下这还不够,要真正利用garbace集合,您需要在代码的所有方面都包含支持实践,而不仅仅是在您想要的时候删除一些东西

zombiegx在寻找更多信息时发布了您最大的两项资产。

答案 2 :(得分:1)

关于它的大部分内容都包含在上面列出的博客文章中,但基本的细分是:

  1. 删除所有对象引用。这包括删除事件侦听器或使用弱引用,如上所述,并确保有问题的对象不在任何集合对象中
  2. 将原始对象句柄设置为“null”以帮助垃圾收集器实现引用不再活动
  3. 的等待。 :)或者使用Grant Skinner技巧(上面链接)尝试快速强制垃圾收集。

答案 3 :(得分:0)

http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html

这是我发现的有关垃圾收集的最佳文档。简而言之,VM2使用一种名为Mark Sweeping的技术。它基本上遍历应用程序的每个对象,如树,并标记它们。可以取消分配不再标记的任何对象。这个过程发生在很多帧上,而不是一次完成。

因此,对于符合垃圾收集条件的内容,不得对其进行任何引用,例如,必须将其从显示列表中删除,不得其他对象包含引用。

要注意的一件事是弱参考。例如,Dictionary对象可以通过传入布尔值来使用弱引用。这意味着当一个对象被放置在已被设置为使用弱引用的字典中时,它将不计入引用,因此有资格进行垃圾收集(假设没有其他引用)

答案 4 :(得分:0)

明确地读到这个:Grant Skinner - Resource management for as3。这将告诉您有关FlashPlayers垃圾收集器的所有信息,并向您展示一堆提示。使用as3的每个人都应该阅读它!