我非常欣赏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() 两次,但没有成功。事实上,我对“is GCRoot”问题更感兴趣(由fb配置文件暗示),如果你告诉我它可能会有更多帮助。
最佳答案
我认为上下文可能会 listen到 this
,以便它可以对任何添加的子项执行依赖项注入(inject)或为它们创建中介。人们希望在与 mediatorMap 或 viewMap 对话之前不会附加监听器,但我认为 RL 作者很可能不会考虑这样的用例:您希望 View 上有一个上下文一段时间比 View 的实际生命周期短。
关于actionscript-3 - 为什么Context会成为GCRoot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972535/