关于cocoa框架中使用kvo时释放对象

发布于 2024-11-02 12:26:56 字数 171 浏览 0 评论 0原文

有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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

2024-11-09 12:26:56

您只需执行第二个操作即可避免 A 向已释放的对象发送消息。

You only need to do the second one to avoid A sending a message to a deallocated object.

乄_柒ぐ汐 2024-11-09 12:26:56

作为一个好的实践,您应该在不再需要观察者时将其删除,但不这样做不会导致任何问题,因为这两个对象都不会被消息保留,因此如果您释放 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文