假设我有这样的代码:在c#中如何知道一个弱引用的对象是否会被垃圾收集?
class Test
{
WeakReference m_ref;
public Test()
{
Test1();
Test2();
}
void Test1()
{
m_ref = new WeakReference(new object());
}
void Test2()
{
// If I do the GC then the m_ref.Target is null
// GC.Collect();
Debug.Log(m_ref.Target);
}
}
void TestFunc()
{
new Test();
}
在这个例子中我创建了一个新的对象实例,并将其设置为WeakReference
例如在Test1
。如果我在退出Test1
后正确理解,那么对象实例将没有任何引用,因此此实例即将为GC
。
但是,在Test2
如果GC
未执行,我仍然可以通过m_ref.Target
访问对象实例。
有没有什么办法,我可以知道m_ref.Target
无效没有手动执行GC
?
你试过'm_ref.IsAlive'? – hellowstone
@hellowstone我试过了。如果我不打电话给GC,它会返回'true'。看起来它与'Target!= null'等价吗? – jayatubi
难道你不需要一个强大的参考,直到你不需要它,然后使它变弱? – Sinatr