看到这堂课:
class Outer
{
private Foo _foo;
public Outer()
{
_foo = new Foo();
GC.KeepAlive(_foo);
}
}
如果我创建了一个类Outer的对象,该对象是否会被GC?
答案 0 :(得分:3)
您确定您已正确理解KeepAlive
的工作原理吗?
引用指定的对象,其中 使它不符合垃圾条件 从一开始就收集 目前的常规到了哪里 这个方法叫做。
因此,您要实例化Outer
的实例。构造函数实例化_foo
并立即调用KeepAlive
。 KeepAlive
调用确保在实例化_foo
和调用KeepAlive
之间的时间内未收集KeepAlive
。只要_foo
来电完成,Outer
就有资格收集。
KeepAlive
的实例 - 或任何其他类 - 一旦不再使用,就有资格收集。即使在理论上,对_foo
的调用也是无关紧要的:它可能会使{em}稍微的{{1}}保持活着,但它对外层类没有任何影响。