我怎样才能确保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
如何正确处理?
更新
到目前为止,我找到了这些资源
答案 0 :(得分:0)
订阅NotificationCenter的观察者无法在应用重启后继续存在。这是因为一旦应用程序死亡,您添加的对象就会从内存中删除,无论是崩溃还是正常终止。这就是说,所有观察者都需要在应用程序的运行时添加,并且在应用程序运行时也可以删除它们。一旦应用终止,所有相关的内存都会被释放,包括订阅的观察者。