2013-10-11 56 views
0

我在monomac中綁定了一個Cocoa類。如果我在該類的實例上調用Dispose(),它是否總是在非託管端調用deallocXamarin中的Dispose和dealloc語義

當託管類爲Dispose() ed時,dealloc可能不會被調用的原因是什麼?

回答

3

Dispose將在本機對象上調用release而不是dealloc(但如果沒有其他人保留它,它可能會取消分配對象)。

請注意,多次撥打Dispose只會撥打release一次。

更新

這被證明是在的MonoMac/Xamarin.Mac一個bug(現已被固定)。

+0

是什麼導致對象在託管代碼中發送'retain'?簡單地參考它? – TheNextman

+1

每當爲Objective-C對象創建託管包裝器時,都會調用retain。然後''釋放'將在被管理對象被銷燬時被調用(或者你手動調用'Dispose')。 –

+0

我已經提出了與此行爲有關的錯誤15405 ... Rolf,你有機會看看並讓我知道如果我做錯了什麼? https://bugzilla.xamarin.com/show_bug.cgi?id=15405 – TheNextman