观察通知

时间:2017-01-06 10:08:40

标签: ios objective-c

当应用程序进入前台状态时,我正在发布通知,我正在观察每个视图控制器中的通知。观察时的行为如何?哪个视图控制器将首先观察它以及它如何工作?

让我给出一个场景: 我已经启动了我的应用程序并完成了流程,现在我的应用程序将从第4个ViewController进入后台并返回到前台状态。现在哪个视图控制器会先观察?

更多详情: 当我尝试时,我得到如下日志

  

2017-01-06 20:54:04.384 notificationCheck [607:7636]在First中观察   的ViewController

     

2017-01-06 20:54:04.384 notificationCheck [607:7636]在First中观察   的ViewController

     

2017-01-06 20:54:04.384 notificationCheck [607:7636]在第二次观察   的ViewController

     

2017-01-06 20:54:04.384 notificationCheck [607:7636]在First中观察   的ViewController

     

2017-01-06 20:54:04.385 notificationCheck [607:7636]在第三次观察   的ViewController

     

2017-01-06 20:54:04.385 notificationCheck [607:7636]在First中观察   的ViewController

     

2017-01-06 20:54:04.385 notificationCheck [607:7636]第四次观察   的ViewController

这是怎么发生的,原因是什么?为什么在firstviewcontroller中多次观察到通知?Click here to see the code

3 个答案:

答案 0 :(得分:0)

如果在UIViewController方法的ViewDidLoad上添加了通知观察者,则必须从UIViewControllerViewDidUnload中的ViewWillDisappear移除通知观察者方法。如果您不删除通知观察者,则通知观察者添加的每个UIViewController都会收到通知事件。这就是为什么删除通知观察者是一个好习惯。同样,尽量避免在同一UIViewController上多次添加相同的通知观察者,否则UIViewController将多次收到通知。

答案 1 :(得分:0)

根据此方案,将定义发送通知的顺序。

如果您在每个控制器中都有观察者,则按顺序传递通知,以便如何推送或显示视图控制器。

如果在每个视图控制器中删除观察者,则只会在应用程序进入后台状态的视图控制器中观察到通知。

答案 2 :(得分:-1)

逻辑上,当您添加通知并添加观察者时,如果删除了视图控制器,则删除通知。根据ViewController生命周期在ViewDidUnload方法中删除。 如果您不删除,那么每个视图控制器都将监听通知并在定义时启动事件。