向NSNotificationCenter添加/删除观察者的最佳实践

Sun*_*day 2 dealloc viewdidload nsnotificationcenter ios viewdidunload

添加和删​​除观察者的最佳做法是NSNotificationCenter什么?

我想知道如果加入self作为观察员viewDidLoad和删除selfviewDidUnload就足够了.也许我应该删除selfdealloc为好.

也许需要考虑低内存条件.我可以看到添加viewDidLoad和删除dealloc有问题:viewDidUnload由于内存不足而被调用...然后viewDidLoad在再次显示视图时被调用...现在self已被添加为观察者两次没有删除(因为dealloc不是所谓的).

注意:我正在考虑一个self引用UIViewController子类的基本示例.

Mic*_*ann 8

我经常做我的UIViewController观察员注册viewWillAppear和我的删除viewWillDisappear.

viewWillDisappear似乎是一个更安全的选择对我比viewWillUnload,因为后者方法只在IOS版本低内存情况下被称为旧的比5.0.

最合适的答案可能取决于您的视图控制器正在做什么.您希望在视图显示之前得到(并且需要做出反应)通知吗?如果是这样,也许添加观察者viewDidLoad对你来说是正确的.


l -*_*c l 5

对于iOS 9+和OS X 10.11+,WWDC 2015会议202"Cocoa的新功能"宣布:

NSNotificationCenter
释放的观察者将自动取消注册

let center = NSNotificationCenter.defaultCenter()
center.addObserver(self,
                   selector: "localeChanged:",
                   name: NSCurrentLocaleDidChangeNotification,
                   object: nil)
Run Code Online (Sandbox Code Playgroud)

不需要打电话

let center = NSNotificationCenter.defaultCenter()
center.removeObserver(self,
                      name: NSCurrentLocaleDidChangeNotification,
                      object: nil)
Run Code Online (Sandbox Code Playgroud)

见:33:27的视频,pdf slide 241