我曾经使用 Objective-C 语言开发 iOS 应用程序,并依靠该dealloc
方法在我的应用程序中执行一些清理/注销任务。现在在 MonoTouch(垃圾收集)上,它不再是一个选项。
假设我有一个添加(子类)的实例UIViewController
作为其属性的子视图。反过来注册自己以接收来自另一个管理器/全局对象的一些事件,以便它知道如何相应地更新自己(例如:)。View
MyView
UIView
MyView
onlineProfilesManager.Refreshed += () => <update UI with the new state>;
只要MyView
在屏幕上,一切都很好。但是我必须知道它何时从屏幕上删除,以便我可以MyView
从事件处理程序中注销。
在 Obj-C 中,这可以简单地在dealloc
方法中完成,因为当屏幕更改时,它会UIViewController
被释放 -->MyView
从它的超级视图中删除,然后MyView
调用 dealloc 方法。
在 Monotouch 中,我不再有这种“确定性”流程。我试图在UIViewController
andMyView
析构函数中放置一些打印语句,但它们从未被调用(原因是因为MyView
仍然为事件处理程序注册,因为我不知道何时/如何取消注册它,它永远不会被释放)。
有谁知道在 MonoTouch 中处理这种情况的“模式”是什么?我认为我错过了一个基本概念并且在开发我的应用程序时遇到了麻烦。
提前致谢。
编辑 我正在编辑我的问题,因为看起来我的问题的解决方案是使用弱事件模式,但我没有找到 MonoTouch 平台的实现。
有谁知道如何在 MonoTouch 中使用弱事件模式?