在Xamarin文檔Foundation.NSObject
,在Lifecycle section,它說:也是按需創建獲取Xamarin.iOS NSObject的從IntPtr的(新的或緩存)處理
C#NSObjects當你調用一個方法或屬性,返回一個NSObject。此時,運行時將查看對象緩存並確定給定的Objective-C NSObject是否已經出現在受管理的世界中。如果對象已經出現,則返回現有對象,否則調用將IntPtr作爲參數的構造函數來構造該對象。
有沒有辦法從我的代碼做到上述?換句話說,給定一個IntPtr
句柄,如果它已經存在,我可以得到一個C#NSObject
,或者如果它不存在,讓Xamarin創建一個新的?
我想這樣做的原因是我想保留一個C#NSObject
的IntPtr
句柄,然後Dispose()
它。在代碼後面,我想從IntPtr
得到NSObject
。
The reason I want to do the above是我讀夠了documentation,blogs和SO que小號tiØns關於C#垃圾收集和Xamarin.iOS本地引用計數的對象,我決定Dispose()
一切之間的相互作用,只要可能。所以在所有方法中,只要我得到NSObject
參數,我就使用using
。例如:
[Foundation.Action("buttonPressed:")]
public void RatingButtonTapped(UIButton button) {
using (button) {
Console.WriteLine("Hello world");
}
}
所以,如果我一直保持到初始化期間UIButton
早參考,運行這個動作時將佈置。相反,我計劃保留IntPtr
句柄,並在稍後需要時重新獲取UIButton
。
你是對的,但我真正的*實際* **實際**問題是,我試圖找到一種一致的方式來管理內存*之前*我甚至開始項目。我剛剛完成了一個Xamarin.Android應用程序,因爲我不瞭解C#GC如何與Java GC交互(我最終放棄並偶爾調用GC.Collect()),導致內存泄漏。所以我想從這個新項目開始時就要格外小心,現在做一些愚蠢的事情來學習,而不是在項目結束的時候太遲地學習它們。 – imgx64
是的,謝謝,我已經編輯了答案。 –