閱讀MT文檔,我已經看到可以釋放內存也實現IDisposable .NET模式。MonoTouch和IDisposable模式
例如,在擴展的UIViewController(MyViewController)的自定義類,我可以覆蓋下面的方法:
public override void Dispose (bool disposing)
{
if (disposing){
// do some stuff here
}
base.Dispose (disposing)
}
從這個角度出發,我的兩個問題是:
- 什麼類型除了圖像之外,還必須發佈哪些元素?
- 是否必須從MyViewController類的實例(myViewController.Dispose())調用Dispose方法,或者像dealloc方法一樣自動調用Dispose方法?
在此先感謝您。問候。
謝謝您的答覆。很有幫助。我唯一不明白的是:「大多數託管的基於NSObject的對象實例很小,但它們可以代表大型的本地對象(GC只會知道第一個託管的大小)。」你能解釋一下它是什麼意思?再次感謝你。 –
從_StackOverflow iDisposable標記info_清楚了託管和非託管對象之間的區別:非託管的對象不在.NET垃圾收集器的範圍之內。在MT中,我並不清楚兩者之間的差別,我很難應用正確的內存管理行爲。 –
從管理的角度來看,類似'new NSString(「a」)'和'new NSString(「aaa ... 1000 ... aaa」)的東西,大小相同 - 即sizeof(NSString)大多隻是一個句柄,指向本地NSString對象的'IntPtr'。因此,GC不能使用* real *內存總量來決定何時收集。但是,一旦收集到第二個,將調用Dispose,並釋放長字符串。這就是在代碼中使用(或不)Dispose時的一些判斷,可以幫助您節省內存(通過確保它儘快發佈)。 – poupou