3

我非常感谢 Robotlegs,但最近我遇到了一个 GC 问题。我只是将引用设置为 null 来处理上下文对象失败。在 FB 配置文件工具的帮助下,我发现上下文对象似乎是一个“GC Root”。为了弄清楚这一点,我编写了一个简单的类,它创建了一个上下文 obj 并使其无法访问。这是该类的详细信息:

public class MemoryLeak extends Sprite{
    public function MemoryLeak()
    {
        makeAndDrop();
    }

    public function makeAndDrop():void{
        var _context = new Context(this);
        _context = null;
    }
}

当我运行这个类时,我希望它被 GC 处理,但它不起作用(大多数时候,不是每次)。配置文件工具告诉我这个实例是一个 GCRoot。我读过一些关于 GC 的文章,但很少有人提到 GCRoot 本身。谁能告诉我为什么,非常感谢!

PS:我尝试在 makeAndDrop() 之后调用 System.gc() 两次,但没有成功。事实上,我对“是 GCRoot”问题(由 fb 配置文件暗示)更感兴趣,如果你告诉我它可能会有所帮助。

4

1 回答 1

0

我认为 Context 可能会监听this以便它可以对任何添加的孩子执行依赖注入或为他们创建调解器。有人希望在您与 mediatorMap 或 viewMap 交谈之前不会附加侦听器,但我认为 RL 作者很可能不会考虑在一段时间内您需要视图上的上下文的用例比 View 的实际寿命短。

于 2013-02-14T03:12:31.243 回答