使用Monotouch时,我应该更喜欢NSNotificactionCenter还是.NET事件?

时间:2011-09-30 15:11:55

标签: events xamarin.ios nsnotificationcenter

在Monotouch中开发时,对我们真正的.NET eventNSNotificationCenter“更好”吗?

简单示例:我有UIViewController。它提供了一个事件“ CallbackWhenDisappeared ”。此事件在ViewDidDisappear中被触发。谁有兴趣可以报名参加活动。

我还可以在NSNotificationCenter上发布“ MyFancyControllerHasDisappeared ”并让感兴趣的对象在那里订阅。

首选哪个版本?

我看到.NET事件的缺点:消失的控制器可能会保留对订阅控制器的引用(或者反过来?),并且可能不会被垃圾回收。

我也喜欢使用NSNotificationCenter时的松散耦合,而不是类必须相互了解的事件。

是否有错误或正确的方法?

2 个答案:

答案 0 :(得分:1)

我实际上更喜欢使用TinyMessenger。与NSNotifications不同,它处理作为框架一部分的调用的异步性。

托管对象还允许更好的可调试性特别是,考虑到这些通常是跨容器调用,我发现这非常有用。

var messageHub = new TinyMessengerHub();
// Publishing a message is as simple as calling the "Publish" method.
messageHub.Publish(new MyMessage());

// We can also publish asyncronously if necessary
messageHub.PublishAsync(new MyMessage());

// And we can get a callback when publishing is completed
messageHub.PublishAsync(new MyMessage(), MyCallback); 
// MyCallback is executed on completion

https://github.com/grumpydev/TinyMessenger

答案 1 :(得分:0)

没有对或错,但在我看来它看起来如此:

NotificationCenter - 您不知道哪些对象对“事件”感兴趣,您将其发送出去并且任何对象都可以接收它

.Net Events - 如果两个对象之间存在直接连接,请使用此方法,例如UIViewController将另一个UIViewcontroller显示为Modal。 ModalUIViewcontroller会触发一个事件,如果它将隐藏并且UIViewController被置于其中