NotificationCenter:释放块的所有者时自动removeObserver

时间:2017-06-10 19:15:07

标签: ios swift closures

我有几个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?) - 这些可能会附加到闭包吗?然后我可能能够监视该对象并了解何时释放闭包。

0 个答案:

没有答案