15
使用WeakReference時,我們怎樣才能確定.IsAlive和.Target調用之間沒有收集目標?例如:
A
回答
25
剛剛獲得Target
並檢查它是否不爲空:
object target = myWeakReference.Target;
if (target != null)
{
((MyType)target).Foo();
}
的docs for IsAlive
明確說:
由於對象可能是 回收垃圾收集 後立即 不建議 返回true,使用此屬性IsAlive屬性,除非你只爲一個假的返回值測試 。
2
你不能。將myWeakReference.Target分配給一個變量,並檢查是否爲空。
4
「IsAlive」屬性的唯一目的是當WeakReference的目標已經被銷燬時想要採取某些行動的情況下,但是您不希望冒着意外的風險將其存活超過必要的時間。如果有人說,例如
if (someWeakReference.Target == null) cleanup_related_object();
和垃圾收集是:(無論出於何種原因),其評估someWeakReference.Target代碼之後觸發時,GC會注意到存在着一個強引用該對象,並排除其收藏。在另一方面,他說:
if (!someWeakReference.IsAlive) cleanup_related_object();
不會有什麼意外延長someWeakReference目標的壽期目標
風險相關問題
- 1. 使用WeakReference的Java示例的線程安全
- 2. sql.Result.LastInsertId()的線程安全性
- 3. 使屬性線程安全
- 4. 線程安全SingletonHolder性能?
- 5. 線程安全屬性
- 6. 線程安全屬性
- 7. Java中的WeakReference線程
- 8. java線程安全:線程安全嗎?
- 9. NSManagedObject實例的線程安全性?
- 10. Java類中的線程安全性
- 11. V4L2的線程安全性如何?
- 12. D中數組的線程安全性?
- 13. parallelStream中HashSet的線程安全性
- 14. C/C++ tmpnam的線程安全性?
- 15. Matlab引擎的線程安全性API
- 16. 線程的安全性如何?
- 17. LibAv/FFMpeg的線程安全性?
- 18. 線程安全
- 19. 線程安全
- 20. 線程安全
- 21. 線程安全
- 22. 線程安全
- 23. 線程安全
- 24. 線程安全
- 25. 線程安全
- 26. 線程安全
- 27. 線程安全
- 28. 線程安全的
- 29. 線程安全的,
- 30. Weakreference get()方法有多安全? (Android,asynctask)