观察来自ViewController的通知

3 uiviewcontroller ios notificationcenter ios-lifecycle

当数据库中的数据更新时,我NotificationCenter用新数据将通知发布到客户端。A ViewController将观察此通知,以便可以相应地更新UI。
如果View Controller观察到新的通知并尝试更新UI,而不是屏幕上当前的View Controller,则该应用程序会崩溃吗?
还是会观察通知的功能等到出现视图控制器后执行?

Dun*_*n C 5

如果仅当视图控制器在屏幕上时通知才有意义,那么您应该收听viewWillAppear并停止收听viewWillDisappear

另一种方法是在viewDidLoad中监听通知,并在dealloc(Objective-C)或deinit(Swift)中停止监听。如果这样做,则视图控制器将在其始终存在的整个时间内接收指定的通知,而不管其是否在屏幕上可见。

如果您在视图控制器不在最前面时继续收听通知,则不会崩溃,但您可能会进行不可见的更新,从而可能会使应用程序的响应速度降低。

或者,您也可以使用通知来更新您的视图控制器的模型(数据存储),并让代码足够聪明来跟踪当视图控制器是可见的,只有做好UI更新时,它可见的。

编辑:

请注意,如果您在viewDidLoad中注册了通知,并且您的应用程序在iOS> = 9中运行,则无需在deinit/中注销该通知dealloc。操作系统现在可以在释放对象时处理注销对象以进行通知。