MonoTouch中的弱事件模式

Edu*_*lho 4 events weak-references xamarin.ios ios

我曾经使用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中,我不再拥有这种"确定性"流程.我试图把在一些打印语句UIViewControllerMyView析构函数,但他们从来不被称为(原因是因为MyView仍注册为事件处理程序,因为我不知道何时/如何注销它,它永远不会被释放).

有谁知道在MonoTouch中处理这种情况的'模式'是什么?我想我错过了一个基本概念,并在开发我的应用程序时遇到麻烦.

提前致谢.


编辑 我正在编辑我的问题,因为看起来像我的问题的解决方案是使用弱事件模式,但我没有找到MonoTouch平台的实现.

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

小智 6

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

如果这不符合您的需求,您可以执行与此类似的操作http://sgmunn.com/blog/2012/05/non-gcd-event-handlers/

干杯.