它是實現事件的WeakReference經過處理,如果該事件是唯一持有的參考和作爲垃圾進行回收,我們需要的對象一個好的做法呢?的WeakReference和事件處理
作爲參數傳遞給這個:
鄉親們說,如果你訂閱的東西是你的責任,退訂,你應該這樣做。
它是實現事件的WeakReference經過處理,如果該事件是唯一持有的參考和作爲垃圾進行回收,我們需要的對象一個好的做法呢?的WeakReference和事件處理
作爲參數傳遞給這個:
鄉親們說,如果你訂閱的東西是你的責任,退訂,你應該這樣做。
當你認爲解決了一個組的問題(事件管理參考和內存泄漏預防),它很可能會開闢一個新的問題。
的一個問題,我可以看到的是事件處理過程中,如果源對象是垃圾收集過程中(因爲它是隻能用弱引用舉行),訪問源對象將導致空引用異常的任何代碼。你可以爭辯說,事件處理程序不應該訪問源對象,或者它必須有一個強大的參考,但可以認爲這可能是一個比你想要解決的問題更糟糕的問題。
弱委託模式是什麼,應該有在CLR。正常事件展示「在你活着時通知我」的語義,而我們經常需要「在我活着時通知我」。只是在WeakReference上委託是錯誤的,因爲委託也是一個對象,即使recepient仍然活着並且有傳入引用,委託本身只被WeakReference引用並立即收集。有關實施示例,請參閱this old post。在自己的權利
弱引用,作爲委託持有引用不解決問題。在Prism(www.microsoft.com/compositewpf)附帶的複合應用程序庫中,有一個WeakDelegate類可以從源代碼中獲取。 WeakDelegate基本上是反射,並且只創建一個委託,然後釋放它,因此不保留任何指針。在CAL內部,它由EventAggregator類使用,但是你可以自由使用,因爲它在MS-PL下。
這是好事,從事件退訂時,你可以的習慣得到的,但有時沒有明顯的「清理」方法,它可以做到的。我們最近在這個主題上發佈了blog article;它包括使用WeakReference訂閱事件很容易的方法。
問題就變成了:垃圾收集時該事件被觸發的可能性有多大?爲什麼首先使用WeakReference? – 2008-10-09 04:27:15
@Jon Limjap沒有弱引用,是不是這個機會零,因爲事件保持對象的軌道,因此它不會被收集? – fostandy 2011-04-21 04:55:19