不如说,尽管如此,确定性的观点是,任何拥有观察对象的人都可以告诉它已经完成,并将(最终)被释放。这样一来,当不需要做观察的事情时,就可以立即停止观察,无论何时实际被释放。
这一点非常重要,因为Cocoa中的对象的生命周期并不像一些人认为的那样确定性。各种Mac OS X框架本身将会发送您的对象 – 保存和-autorelease,延长其使用寿命超出您可能会认为的。
此外,当您转换到Objective-C垃圾回收时,您会发现-finalize将在-dealloc中与非常不同的时间(非常不同的上下文)运行。一方面,最终确定在不同的线程上进行,所以您真的无法以-finalize方法将-removeObserver:forKeyPath安全地发送到另一个对象。
在-dealloc和-finalize中保持内存(和其他稀缺资源)管理,并使用单独的-invalIDate方法让拥有者以确定性的方式告诉您完成的对象;做一些事情,如删除KVO观察。您的代码的意图将更加清晰,您将有更少的细微问题来处理。
总结以上是内存溢出为你收集整理的在Cocoa中,我需要删除一个Object,以便在取消分配时收到KVO通知?全部内容,希望文章能够帮你解决在Cocoa中,我需要删除一个Object,以便在取消分配时收到KVO通知?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)