我曾經使用Objective-C語言開發iOS應用程序,並依靠dealloc
方法在我的應用程序中執行一些清理/取消註冊任務。現在在MonoTouch(垃圾收集),它不再是一個選項。MonoTouch中的弱事件模式
假設我有一個UIViewController
,增加了作爲它的一個子視圖的View
財產MyView
(UIView
子類)的一個實例。 MyView
又註冊自己接收來自另一個經理/全局對象的一些事件,以便它知道如何相應地更新自己(例如:onlineProfilesManager.Refreshed +=() => <update UI with the new state>;
)。
只要MyView
在屏幕上,一切都很好。不過,我必須知道它何時從屏幕上移除,以便我可以從事件處理程序取消註冊MyView
。
在對象 - 這可能在dealloc
方法簡單地完成,因爲當屏幕改變UIViewController
被釋放 - >MyView
被刪除從它的上海華再MyView
dealloc方法被調用。
在Monotouch中,我沒有這種'確定性'流程了。我試圖把一些打印語句放在UIViewController
和MyView
析構函數中,但它們從不被調用(原因是因爲MyView
仍然是註冊的事件處理程序,因爲我不知道何時/如何註銷它,它永遠不會解除分配)。
有沒有人知道在MonoTouch中處理這種情況的'模式'是什麼?我想我錯過了一個基本概念,並陷入了開發我的應用程序的困境。
在此先感謝。
編輯 我因爲長得像我的問題的解決方案是使用Weak Event Pattern但我沒有找到MonoTouch的平臺實現編輯我的問題。
有誰知道我該如何在MonoTouch中使用Weak Event Pattern?
嘗試重寫'Dispose'。這可能不適用於你的情況,但它(聽起來的方式)。讓我知道。 – jonathanpeppers 2013-02-25 23:58:55
如果他重寫DisView on MyView,它可能無法正常工作,但如果他斷開MyViewController的Dispose重寫中的處理程序,它應該可以正常工作。 – jstedfast 2013-02-26 13:58:43
@jstedfast @Greg Munn(下圖)建議我斷開/連接'ViewWillDisappear'和'ViewWillAppear'方法對中的事件處理程序。類似的情況是在'Constructor'和'Dispose'方法上執行此操作?如果UIViewController被事件處理程序捕獲,是否會調用Dispose? – 2013-02-26 14:40:37