MonoTouch中的弱事件模式

我曾经使用Objective-C语言开发iOS应用程序,并依靠dealloc方法在我的应用程序中执行一些清理/取消注册任务。 现在在MonoTouch(垃圾收集),它不是一个选项了。

假设我有一个UIViewController ,作为它的View属性的子视图添加MyViewUIView子类)的一个实例。 MyView进而注册自己接收来自另一个manager / global对象的一些事件,以便它知道如何相应地更新自己(例如: onlineProfilesManager.Refreshed += () => <update UI with the new state>; )。

只要MyView在屏幕上,一切都很好。 但是,我必须知道它何时从屏幕上移除,以便我可以从事件处理程序中取消注册MyView

在Obj-C中,这可以简单地在dealloc方法中完成,因为当屏幕更改时, UIViewController被解除分配 – > MyView从它的超级视图中移除,然后调用MyView dealloc方法。

在Monotouch中,我不再有这种“确定性”的stream程。 我试图把一些打印语句在UIViewControllerMyView析构函数,但他们从来没有被调用(原因是因为MyView仍然注册的事件处理程序,因为我不知道什么时候/如何取消注册,它永远不会解除分配)。

有没有人知道在MonoTouch中处理这种情况的“模式”是什么? 我想我错过了一个基本的概念,并陷入困境开发我的应用程序。

提前致谢。


编辑我正在编辑我的问题,因为看起来像我的问题的解决scheme是使用弱事件模式,但我没有find一个MonoTouch平台的实现。

有谁知道如何在MonoTouch中使用弱事件模式 ?

处理事件的最好方法是在ViewWillDisappear中取消注册,并在ViewWillAppear中注册。 这意味着你不能使用匿名方法,因为你没有引用方法来取消注册。

如果这不符合你的需求,你可以做类似于这个http://sgmunn.com/blog/2012/05/non-gcd-event-handlers/

干杯。

如果你正在寻找弱势事件,你可以在这里尝试我的“信使”实施。

它的灵感来自于TinyIoC中的可用内容 ,但是我重新实现了它,所以它使用了较less的reflection等等。