我有几个ViewControllers通过调用属于我的类的一部分来间接订阅全局NotificationCenter实例:
public func subscribeToValueChanges (key: String, callback: @escaping ()->Void)
{
changeNotifier.addObserver (forName: NSNotification.Name(rawValue: key), object: self, queue: OperationQueue.main, using: { (n: Notification) in
callback()
})
}
(使用addObserver(forName:object:queue:using:)
进行管理。
现在,我必须记得在我的viewcontroller被释放时调用removeObserver,否则我可能会导致泄漏。这有点不安全。
我想知道是否有办法自动执行此操作,以便实现上述功能的类可以了解块的所有者何时被释放。或者甚至在当前的ViewController消失时(似乎没有全局通知,或者是否存在?)
或者,通过在闭包的代码中使用[weak self]
,callback
变为nil,这样我就可以在所有回调上执行偶尔的垃圾收集(通过将它们作为选项存储在数组中)? / p>
另一个想法:ObjC运行时提供关联对象(How do I use objc_setAssociatedObject/objc_getAssociatedObject inside an object?) - 这些可能会附加到闭包吗?然后我可能能够监视该对象并了解何时释放闭包。