假設我有這樣的代碼:在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