NSNotificationCenter真的很酷,我们可以用它构建非常可扩展的应用程序。我的问题是:我们是否可以在应用程序中滥用使用NSNotificationCenter,即大量使用它,或者它不是一个真正的好选择?目前,我在有JSON服务响应时使用它:我发布通知,因此我有几个侦听器在监听这种类型的通知。到目前为止,我有近几十个服务要调用,我们可以说,基于这些通知要实现更多的操作。WDYT?谢谢
发布于 2011-11-17 04:42:42
根据我的经验,编写大量使用NSNotificationCenter的应用程序会导致维护上的噩梦,需要引用使用您的数据的(委托)对象意味着您可以逐步完成处理数据的实际过程;使用通知,事情就太脱节了。
也就是说,在很多情况下,通知是有意义的(设备轮换、应用程序启动/退出、广泛的状态更改),但我通常会在可能的情况下尽量避免它们。
我发现通知工作良好的一个地方是,当我有一个控制器来管理许多其他控制器使用的数据时;当数据更改时,我启动一个通知,这允许所有相关方进行更新。例如,我可能有一个UserController来管理有关当前用户的信息(姓名、照片等)。当一些用户数据发生变化时,我会发布一个通知(例如UserControllerDidUpdatePhotoNotification)。然后,任何感兴趣的视图控制器都可以选择更新他们正在显示的照片。
我认为阻止我使用通知的最大原因是对可维护性的渴望,如果使用通知仍然允许您拥有可维护的代码,则继续使用它们;如果不允许,则切换到其他设计。
发布于 2011-11-17 04:32:23
当NSNotificationCenter发送通知时,它实际上与让通知发送者直接向接收者发送消息没有什么不同。NSNotificationCenter提供的好处是对象能够通信,而不必维护彼此之间的引用。
我认为不滥用NSNotificationCenter的诀窍是确保您的通知处理程序是有效的。如果您知道许多对象将使用单个通知,那么您应该确保这些通知处理程序尽可能高效。要做到这一点,您可以使用一些技巧,例如使用有价值的信息填充NSNotification的userinfo字典,通知处理程序可以使用这些信息轻松快速地确定它们应该对通知执行什么操作(如果有的话)。
您可以使用Instruments来测量通知处理程序的运行时间,然后您可以尝试进一步优化。请记住,通知处理程序是在负责生成通知的同一线程上调用的,因此所有通知处理程序一次只运行一个,直到它们都完成为止。要有效率!
发布于 2013-09-12 02:53:16
一个更好的选择可能是使用像Tolo这样的事件总线--非常容易使用,并在取消分配时自动删除订阅者。你只需要写下:
SUBSCRIBE(EvenType)
{
//do something with event
}看看这个。
https://stackoverflow.com/questions/8158115
复制相似问题