当应用程序进入前台状态时,我正在发布通知,我正在观察每个视图控制器中的通知。观察时的行为如何?哪个视图控制器将首先观察它以及它如何工作?
让我给出一个场景: 我已经启动了我的应用程序并完成了流程,现在我的应用程序将从第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
答案 0 :(得分:0)
如果在UIViewController
方法的ViewDidLoad
上添加了通知观察者,则必须从UIViewController
或ViewDidUnload
中的ViewWillDisappear
移除通知观察者方法。如果您不删除通知观察者,则通知观察者添加的每个UIViewController
都会收到通知事件。这就是为什么删除通知观察者是一个好习惯。同样,尽量避免在同一UIViewController
上多次添加相同的通知观察者,否则UIViewController
将多次收到通知。
答案 1 :(得分:0)
根据此方案,将定义发送通知的顺序。
如果您在每个控制器中都有观察者,则按顺序传递通知,以便如何推送或显示视图控制器。
如果在每个视图控制器中删除观察者,则只会在应用程序进入后台状态的视图控制器中观察到通知。
答案 2 :(得分:-1)
逻辑上,当您添加通知并添加观察者时,如果删除了视图控制器,则删除通知。根据ViewController生命周期在ViewDidUnload方法中删除。 如果您不删除,那么每个视图控制器都将监听通知并在定义时启动事件。