在Cocoa中,我需要删除一个Object,以便在取消分配时收到KVO通知?

在Cocoa中,我需要删除一个Object,以便在取消分配时收到KVO通知?,第1张

概述当我注册了一个对象foo以从另一个对象栏(使用addObserver:…)接收KVO通知时,如果我然后释放foo,我需要在-dealloc中发送一个removeObserver:forKeyPath:message to bar? 您需要使用-removeObserver:forKeyPath:在[NSObject dealloc]运行之前删除观察者,所以是的,在您的类的-dealloc方法中可以 当我注册了一个对象foo以从另一个对象栏(使用addobserver:…)接收KVO通知时,如果我然后释放foo,我需要在-dealloc中发送一个removeObserver:forKeyPath:message to bar?解决方法 您需要使用-removeObserver:forKeyPath:在[NSObject dealloc]运行之前删除观察者,所以是的,在您的类的-dealloc方法中可以使用它。

不如说,尽管如此,确定性的观点是,任何拥有观察对象的人都可以告诉它已经完成,并将(最终)被释放。这样一来,当不需要做观察的事情时,就可以立即停止观察,无论何时实际被释放。

这一点非常重要,因为Cocoa中的对象的生命周期并不像一些人认为的那样确定性。各种Mac OS X框架本身将会发送您的对象 – 保存和-autorelease,延长其使用寿命超出您可能会认为的。

此外,当您转换到Objective-C垃圾回收时,您会发现-finalize将在-dealloc中与非常不同的时间(非常不同的上下文)运行。一方面,最终确定在不同的线程上进行,所以您真的无法以-finalize方法将-removeObserver:forKeyPath安全地发送到另一个对象。

在-dealloc和-finalize中保持内存(和其他稀缺资源)管理,并使用单独的-invalIDate方法让拥有者以确定性的方式告诉您完成的对象;做一些事情,如删除KVO观察。您的代码的意图将更加清晰,您将有更少的细微问题来处理。

总结

以上是内存溢出为你收集整理的在Cocoa中,我需要删除一个Object,以便在取消分配收到KVO通知?全部内容,希望文章能够帮你解决在Cocoa中,我需要删除一个Object,以便在取消分配时收到KVO通知?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1041123.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存