使用NSNotificationCenter object时,如果您为通知添加了观察者,You must invoke removeObserver: or removeObserver:name:object: before any object specified by addObserverForName:object:queue:usingBlock: is deallocated
。
有没有办法在没有子类化对象并覆盖“dealloc”的情况下执行此操作?如果我可以避免它,我不想要将一堆对象子类化为仅使用它们的通知。在发生之前还有其他方法可以了解dealloc吗?
感谢您的帮助。
答案 0 :(得分:0)
一般来说,您应该考虑哪些对象正在观察变化并使其适当。这通常意味着一个控制器类,在这种情况下,您通常已经有一个自定义子类。通常应该接收观察回调并根据需要转发它们。它应该在创建/销毁/显示/从显示中删除时作为观察者添加和删除。
那就是说,如果你坚持制造任意类观察者,这是一个想法(我认为它应该是安全的,尽管我不想依赖它):
您可以使用单个自定义类来处理观察者的删除。这应该是一个配置了对要删除的类的引用的类。在配置方法期间,此类将自身添加到要使用objc_setassociatedobject
和OBJC_ASSOCIATION_RETAIN
删除的类,并将指针存储到要在NSValue
中删除的类。然后,当它被取消分配时,它会使用NSValue
从通知中心删除其他类。