NotificationCenter.default.addObserver(forName: NSNotification.Name.NSManagedObjectContextObjectsDidChange,
object: context, queue: nil) { notification in /.../ }
Когда вы регистрируетесь на NSNotifcation, как это, согласно документации вам не нужно отменять регистрацию
Обсуждение Если ваше приложение предназначено для iOS 9.0 и более поздних версий или macOS 10.11 и более поздних версий Вам не нужно отменять регистрацию наблюдателя в методе deallo c. В противном случае вам следует вызвать этот метод или removeObserver: перед наблюдателем или любым объектом, указанным в addObserverForName: объект: очередь: usingBlock: или addObserver: селектор: имя: объект: освобожден.
Но до iOS 9.0. Вам нужно было бы отменить такую регистрацию
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self,
name: NSNotification.Name.NSManagedObjectContextObjectsDidChange,
object: nil)
}
Но как NSNotificationCenter узнает, что нужно отменить регистрацию моего объекта при его освобождении?
Я пытаюсь реализовать похожий тип логики c и мне также хотелось бы эту функцию автоматической отмены регистрации. Рассмотрим:
Class Publisher {
var callback:()-> Void
func subscribe( callback:()-> Void) {
self.callback = callback
}
}
Class Subscriber {
var publisher = Publisher()
init() {
publisher.subscribe { /*do something*/ }
}
deinit {
publisher.unsubscribe() //I want this to happen automatically
}
}