关于cocoa框架中使用kvo时释放对象
有2个对象:A和B
调用[A addObserver:B for keyPath:...];
如果我在某处释放对象A。 必须先调用 [A removeObserver:B...] 吗?
如果我在某个地方释放对象B。 必须先调用 [A removeObserver:B...] 吗?
there are 2 object: A and B
call [A addObserver:B for keyPath:...];
if i release object A in somewhere.
have to Call [A removeObserver:B...] first?
if i release object B in somewhere.
have to Call [A removeObserver:B...] first?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您只需执行第二个操作即可避免
A
向已释放的对象发送消息。You only need to do the second one to avoid
A
sending a message to a deallocated object.作为一个好的实践,您应该在不再需要观察者时将其删除,但不这样做不会导致任何问题,因为这两个对象都不会被消息保留,因此如果您释放 A,它将停止观察 B,如果您释放 B观察到的值永远不会改变,因此你的 KVO 观察方法永远不会被调用。
As a matter of good practive, you should remove your observer when it is not needed anymore but not doing so will not cause any problems as neither objects are retained by the message so if you release A it will stop observing B and if you release B the observed value will never change so your KVO observing method will never be called.