雖然根據第"Performance"讀取Xamarin文檔,我注意到的以下章節:Xamarin垃圾收集和循環引用
下圖說明可與強引用會出現一個問題:
對象A對對象B有強烈的引用,而對象B對對象A有強烈的引用。這種對象被稱爲不朽對象由於存在cir強烈的參考。這種父子關係並不罕見,因此即使對象不再被應用程序使用,垃圾收集器也無法收回對象。
這是我第一次聽說C#/ .NET/Mono上下文中的「不朽的對象」。
頁面隨後繼續建議在其中一個對象中使用WeakReference
,這將刪除強循環引用並修復此「問題」。
Xamarin.Android使用Mono的Simple Generational garbage collector:上garbage collection聲稱
與此同時,Xamarin文檔。這是一個標記和掃描垃圾回收器[...]
是否標記和掃描GC不受循環引用的影響?
謝謝。我也注意到可以在iOS上啓用SGen(在選項中有一個複選框),但它被標記爲「實驗性」。在實踐中,有沒有人有過使用iOS上的SGen的經驗,並且是否解決了這個問題? – Lou
有一個[新的參考計數系統](https://developer.xamarin.com/guides/ios/advanced_topics/newrefcount/),如果我理解正確,它的目的是解決相反的問題(對象收集太積極)。有趣的是,它與SGen/Boehm不同。我想這意味着即使使用SGen,iOS對象也被引用計數,並且應避免循環引用。 – bwt