为什么Context成为GCRoot?

时间:2012-12-20 12:45:45

标签: actionscript-3 garbage-collection robotlegs

我非常感谢Robotlegs,但最近我遇到了一个GC问题。我没有通过设置引用null来处置上下文对象。在FB配置文件工具的帮助下,我发现上下文对象看起来像是“GC根”。 为了解决这个问题,我创建了一个简单的类,它创建了一个上下文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配置文件暗示)更感兴趣,如果你告诉我它可能会有更多帮助。

1 个答案:

答案 0 :(得分:0)

我认为Context可能会listenthis,这样它就可以对任何添加的子节点执行依赖注入或为它们创建调解器。人们希望在你与mediatorMap或viewMap交谈之前不会附加监听器,但我认为RL作者很可能不会考虑你想在一段时间内在View上使用Context的用例比View的实际寿命短。