【发布时间】:2019-01-25 00:29:53
【问题描述】:
我正在使用 show segue 和 unwind segue 在两个 iOS viewControllers,VC1 和 VC2 之间导航。在 VC2 的viewDidLoad() 中,我让 VC2 成为观察者。这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "buzzer updated"), object: nil, queue: OperationQueue.main) { _ in
print("set beeperViewImage")
}
}
每次我使用 unwind segue 从 VC2 回到 VC1 时,addObserver() 都会被调用一次,例如,在第四次返回时,segue addObserver 会被调用 4 次;在第五个segue,五次,等等。即使应用程序被发送到后台并被召回,这种行为也会发生。它会记住在上一个会话中发生了多少次 segue,并从那里获取计数。
我在VC1中多次调用没有问题,这是初始VC。
我尝试在 unwind segueing 后将 VC2 设置为 nil。
期待任何指导。
【问题讨论】:
-
在展开 VC2 时移除观察者。只需将卸妆液放入 deinit 中即可。 id 你的 vc2 deinit 没有被调用,在某个地方你保持你的 vc2 的强引用。所以观察者没有被删除。在第二个、第三个展开观察者不断增加。
-
@karthik - “在展开 VC2 时移除观察者。只需将移除器放入 deinit 中”......从 iOS 9 开始,我们不再需要显式移除
NotificationCenter观察者。如果他确实有一个强引用循环,无论如何deinit永远不会被调用。他需要弄清楚是什么建立了强引用循环并解决这个问题。然后,不需要移除观察者,因为它会自动发生跨度>
标签: ios swift addobserver