当应用程序到达前台状态时,我正在发布通知,我正在观察每个视图控制器中的通知。观察时的行为如何?哪个视图控制器将首先观察以及它如何工作?
让我给出一个场景:我已经启动了我的应用程序并完成了流程,现在我的应用程序将从第4 ViewController返回到前台状态。现在,哪个视图控制器将首先观察?
更多细节:当我尝试的时候,我得到了如下的日志
2017-01-06 20:54:04.384通知检查607:7636在第一次ViewController中观察到 2017-01-06 20:54:04.384通知检查607:7636在第一次ViewController中观察到 2017-01-06 20:54:04.384通知检查607:7636在第二次ViewController中观察到 2017-01-06 20:54:04.384通知检查607:7636在第一次ViewController中观察到 2017-01-06 20:54:04.385通知检查607:7636在第三次ViewController中观察到 2017-01-06 20:54:04.385通知检查607:7636在第一次ViewController中观察到 2017年-01-06 20:54:04.385通知检查607:7636在第四ViewController中观察到
这是如何发生的,是什么原因造成的?为什么在第一个视图控制器中多次观察通知?单击此处查看代码
发布于 2017-01-11 14:41:08
根据此场景,将定义传递通知的顺序。
如果每个控制器中都有观察者,则按视图控制器的推送或显示顺序传递通知。
如果您删除每个视图控制器中的观察者,通知将只在应用程序进入后台状态的视图控制器中观察到。
发布于 2017-01-06 10:23:00
如果通知观察者是在UIViewController上添加到ViewDidLoad方法上的,则必须在ViewDidUnload或ViewWillDisappear方法中从该UIViewController中移除通知观察者。如果不删除通知观察者,那么添加通知观察者的每个UIViewController都会接收通知事件。因此,移除通知观察者是一种很好的做法。类似地,尝试避免在同一个UIViewController上多次添加相同的通知观察者,否则UIViewController将多次收到通知。
发布于 2017-01-06 13:12:19
逻辑上,当添加通知并添加观察者时,如果视图控制器被移除,则删除通知。按照ViewController生命周期,在ViewDidUnload方法中删除。如果不删除,则每个视图控制器都将侦听通知,如果定义了,则启动事件。
https://stackoverflow.com/questions/41503316
复制相似问题