gpt4 book ai didi

swift - 按名称删除使用闭包语法创建的 NotificationCenter 观察器是否足够?

转载 作者:IT王子 更新时间:2023-10-29 05:41:14 31 4
gpt4 key购买 nike

我有一些使用 block /尾随闭包语法创建的通知,如下所示:

NotificationCenter.default.addObserver(forName: .NSManagedObjectContextObjectsDidChange, object: moc, queue: nil) { note in
// implementation
}

我后来按名称删除了它,如下所示:

NotificationCenter.default.removeObserver(self, name: NSNotification.Name.NSManagedObjectContextObjectsDidChange, object: moc)

我的问题

这够了吗?或者我是否绝对需要将 NSObjectProtocol 保存到它自己的属性中并使用以下语法删除该属性?

NotificationCenter.default.removeObserver(didChangeNotification)

最佳答案

您绝对需要将返回值存储在一个属性中,稍后再将其删除。

来自 https://developer.apple.com/reference/foundation/nsnotificationcenter/1411723-addobserverforname :

Return Value

An opaque object to act as the observer.

当您调用任何一个 removeObserver 方法时,第一个参数是要移除的观察者。当您设置一个 block 来响应通知时,self 不是观察者,NSNotificationCenter 在幕后创建自己的观察者对象并返回给你。

Note: as of iOS 9, you are no longer required to call removeObserver from dealloc/deinit, as that will happen automatically when the observer goes away. So, if you're only targeting iOS 9, this may all just work, but if you're not retaining the returned observer at all, the notification could be removed before you expect it to be. Better safe than sorry.

关于swift - 按名称删除使用闭包语法创建的 NotificationCenter 观察器是否足够?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924239/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com