在 View Controller 中,我创建了一个 subview 数组,可以随时从父 View 中删除,因此它们的生命周期比 View Controller 的生命周期短。
创建它们时,我几乎这样做:
frame
的观察者属性(property)。 subview 没有对 View Controller 的引用。
当用户删除 subview 时,它会被释放,并且我在控制台中收到一个错误,告诉我 View 的观察者
frame
key 路径尚未删除。当被观察的 subview 不保留对观察者的引用时,如何删除观察者?
反正没有像
removeAllObservers
这样的事情吗? ?我宁愿不必在 subview 中创建对观察者的引用,因为它在某种程度上违背了 KVO 的观点(我不妨使用委托(delegate)设置)。
最佳答案
我不确定你为什么要观察框架,但如果你只是想知道它什么时候被删除,你可以改用 NSNotificationCenter。从那里您的 subview 可以发布到通知中心它已被更改/删除。然后,您的父 View 将看到该通知,并可以根据通知中的内容对其进行处理。它在某种程度上是一个更松散的 kvo。
这是一个很好的设置示例。
Send and receive messages through NSNotificationCenter in Objective-C?
这样,当 super View 被释放/卸载时,它只需要在通知中心删除它自己就可以看到该术语。
无论如何,这是除 KVO 和委托(delegate)之外的另一种方法。
关于iphone - 如何移除 KVO 观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8438652/