MonoTouch中的弱事件模式
我曾经使用Objective-C语言开发iOS应用程序,并依靠dealloc
方法在我的应用程序中执行一些清理/取消注册任务。 现在在MonoTouch(垃圾收集),它不是一个选项了。
假设我有一个UIViewController
,作为它的View
属性的子视图添加MyView
( UIView
子类)的一个实例。 MyView
进而注册自己接收来自另一个manager / global对象的一些事件,以便它知道如何相应地更新自己(例如: onlineProfilesManager.Refreshed += () => <update UI with the new state>;
)。
只要MyView
在屏幕上,一切都很好。 但是,我必须知道它何时从屏幕上移除,以便我可以从事件处理程序中取消注册MyView
。
在Obj-C中,这可以简单地在dealloc
方法中完成,因为当屏幕更改时, UIViewController
被解除分配 – > MyView
从它的超级视图中移除,然后调用MyView
dealloc方法。
在Monotouch中,我不再有这种“确定性”的stream程。 我试图把一些打印语句在UIViewController
和MyView
析构函数,但他们从来没有被调用(原因是因为MyView
仍然注册的事件处理程序,因为我不知道什么时候/如何取消注册,它永远不会解除分配)。
有没有人知道在MonoTouch中处理这种情况的“模式”是什么? 我想我错过了一个基本的概念,并陷入困境开发我的应用程序。
提前致谢。
编辑我正在编辑我的问题,因为看起来像我的问题的解决scheme是使用弱事件模式,但我没有find一个MonoTouch平台的实现。
有谁知道如何在MonoTouch中使用弱事件模式 ?
处理事件的最好方法是在ViewWillDisappear中取消注册,并在ViewWillAppear中注册。 这意味着你不能使用匿名方法,因为你没有引用方法来取消注册。
如果这不符合你的需求,你可以做类似于这个http://sgmunn.com/blog/2012/05/non-gcd-event-handlers/
干杯。
如果你正在寻找弱势事件,你可以在这里尝试我的“信使”实施。
它的灵感来自于TinyIoC中的可用内容 ,但是我重新实现了它,所以它使用了较less的reflection等等。