2009-11-10 68 views

回答

4

在您的代码正常工作之前,不要担心性能问题,并且您可以观察和测量您可能遇到的任何性能问题。注册观察员是很少出现的,所以当你这样做时不应该涉及重大的性能问题。可能很重要的是您注册通知的对象数量以及您要发送的通知数量,因为发布通知涉及到哈希查找。

3

没有真正的性能差异,您可以通过在不同的时间注册通知来注意到。我可以给你的唯一建议是尽可能缩短通知被观察窗口的时间。另外,请确保您只注册一次观察员。如果您多次注册观察员,您会收到多个通知。

为什么你如此关心通知的性能?您是否通过测量确认通知导致问题?

+0

感谢您的回答!是的,如果我在每个对象的init()方法中注册所有通知,而是将它们注册到awakeFromNib()或其他处理程序中,我注意到加载时间有一点点区别!我问过这个问题,看看有人有关于技术的解释! – BitDrink 2009-11-10 15:48:04

+0

BitDrink:不完全。不同之处在于,当你在'init'中执行时,你在UI出现之前就做到了,而当你在'awakeFromNib'中执行时,你会在你的UI出现后(部分)执行它。添加观察者所需的时间不会消失;它只是在UI启动后才移动。尽管如此,这仍然是一件好事,你应该尽量做一些事情。 – 2009-11-10 16:53:19

2

另外,在init方法中使用块作为通知处理程序时要非常小心。例如,您可以将块设置为通知处理程序,以侦听来自类属性的通知(例如视图控制器的managedObjectContext上的didChangeNotification)。在这种情况下,块将保留对象实例,这意味着您的init方法将retainCount递增两次。如果您没有重写发布以正确管理此内容,那么您将保留该类的实例,甚至可能仍会响应这些通知。

因此,我非常小心使用块作为通知处理程序,特别是从init方法。

相关问题