调试时来自NotificationCenter的通知

时间:2017-01-01 13:04:26

标签: swift notificationcenter

我怎样才能确保NotificationCenter内的观察者只被调用一次 - 尤其是当应用程序崩溃/必须被Xcode停止时?

我们假设我要打印通知NSNotification.WhatHaveYou

init() {
    NotificationCenter.default.addObserver(forName: NSNotification.Name.WhatHaveYou, object: nil, queue: OperationQueue.main, using: { (notification) in
            print(notification)
    })
}

哪个工作正常。

Apple在its documentation for NotificationCenter.default.addObserver(forName:, object:, queue:, using:)中说:

  

收到通知时要执行的块。

     

该块由通知中心复制并保存(副本)   直至观察员注册被移除。

但是如何删除此观察者注册,以便在下一个应用程序启动时没有注册进一步的通知?

特别是当应用程序崩溃或我通过Xcode停止应用程序时,观察者不会被删除,因此通知会多次显示 - 更准确地说:lastNumberOfOccurences = lastNumberOfOccurences +1

如何正确处理?

更新

到目前为止,我找到了这些资源

1 个答案:

答案 0 :(得分:0)

订阅NotificationCenter的观察者无法在应用重启后继续存在。这是因为一旦应用程序死亡,您添加的对象就会从内存中删除,无论是崩溃还是正常终止。这就是说,所有观察者都需要在应用程序的运行时添加,并且在应用程序运行时也可以删除它们。一旦应用终止,所有相关的内存都会被释放,包括订阅的观察者。