将对象注册为Notification listener? - 最大化性能!

时间:2009-11-10 15:10:30

标签: objective-c cocoa performance notifications

有一个更好的地方可以将对象注册到通知中心吗?

换句话说,出于性能问题,在init(),awakeFromNib()或其他事件处理程序中将对象注册为Notification侦听器是一种很好的做法吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

通过在其他时间注册通知,您无法注意到任何性能差异。我能给你的唯一建议是将观察通知的窗口缩小到尽可能短的持续时间。另外,请确保只注册一次观察者。如果您多次注册观察者,您将收到多个通知。

为什么您如此关注通知的效果?您是否通过测量确认通知是否导致问题?

答案 2 :(得分:2)

另外,在init方法中使用块作为通知处理程序时要非常小心。

例如,您可以将块设置为通知处理程序,以侦听来自类属性的通知(例如视图控制器的managedObjectContext上的didChangeNotification)。在这种情况下,块将保留对象实例,这意味着您的init方法已将两次retainCount递增。如果你没有覆盖版本来正确管理它,那么你将保留类的实例,更糟糕的是,可能仍然会响应这些通知。

因此,我会非常小心使用块作为通知处理程序,尤其是来自init方法。