代码之家  ›  专栏  ›  技术社区  ›  BitDrink

在何处将对象注册为通知侦听器?-最大化性能!

  •  1
  • BitDrink  · 技术社区  · 16 年前

    换句话说,就性能而言,在init()、awakeFromNib()或其他事件处理程序中将对象注册为通知侦听器是一种好的做法?

    3 回复  |  直到 16 年前
        1
  •  4
  •   NSResponder    16 年前

    不要担心性能,直到您的代码正常工作,并且您可以观察和测量可能存在的任何性能问题。注册观察者是一件非常罕见的事情,因此在这样做时不应该涉及重大的性能问题。重要的是您为通知注册了多少对象以及您正在发送多少通知,因为发布通知涉及哈希查找。

        2
  •  3
  •   kperryua    16 年前

    通过在不同的时间注册通知,实际上不会有任何性能差异。我能给你的唯一建议是将观察通知的窗口缩小到尽可能短的时间。此外,请确保只注册一次观察者。如果您多次注册一个观察者,您将收到多个通知。

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

        3
  •  2
  •   Daniel Thorpe    15 年前

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

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

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