繁体   English   中英

MonoTouch中的弱事件模式

[英]Weak Event Pattern in MonoTouch

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

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

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

在Obj-C中,这可以简单地在dealloc方法中完成,因为当屏幕改变时, UIViewController被释放 - > MyView从它的MyView中删除,然后调用MyView dealloc方法。

在Monotouch中,我不再拥有这种“确定性”流程。 我试图在UIViewControllerMyView析构函数中放置一些print语句,但它们永远不会被调用(原因是因为MyView仍然为事件处理程序注册,因为我不知道何时/如何取消注册它,它永远不会解除分配)。

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

提前致谢。


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

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

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

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

干杯。

如果您正在寻找弱事件,可以在这里尝试我的“Messenger”实现。

它的灵感来自TinyIoC中的可用内容 ,但我重新实现了它,因此它使用较少的反射等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM