-1

我如何确保NotificationCenter中的观察者只被调用一次 - 特别是当应用程序崩溃/必须由 Xcode 停止时?

假设我想打印通知NSNotification.WhatHaveYou

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

哪个工作正常。

苹果在其文档中NotificationCenter.default.addObserver(forName:, object:, queue:, using:)声明:

收到通知时要执行的块。

该块由通知中心复制并保留(副本)直到观察者注册被删除。

但是我怎样才能使这个观察者注册被删除,以便下一个应用程序启动时没有注册进一步的通知?

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

如何正确处理?

更新

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

4

1 回答 1

0

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

于 2017-01-01T14:06:56.227 回答