专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 移动开发

几时调用[[NSNotificationCenter defaultCenter] removeObserver:self];

发布时间:2010-05-30 05:30:51 文章来源:www.iduyao.cn 采编人员:星星草
何时调用[[NSNotificationCenter defaultCenter] removeObserver:self];?

前一阵子在维护一个项目时看到以前同事写的代码,看到他把所有的[[NSNotificationCenter defaultCenter] removeObserver:self];方法都放到了viewController的dealloc方法中,添加observer放到了init中,当时并没有想太多。


后来在写相关代码时发现,当某个notification被post之后,观察者的方法被多次调用。于是想到,难道是多次添加了观察者,而没有删除他?于是看了下苹果官方文档中的代码,发现官方例子中是在viewWillAppear的时候添加,viewWillDisappear的时候remove。


现在我们来深入思考下为什么不能在dealloc中调用[[NSNotificationCenter defaultCenter] removeObserver:self]。首先,让我们来想在添加观察者的时候,我们观察者的retainCount被+1了吗?如果没有被+1,那么当这个类会在retainCount为0时被销毁,通知中心就无法通知到该类,那么remove方法还有意义吗?所以在添加观察者的时候,通知中心必然会将该观察者的retainCount+1,既然通知中心retain了这个观察者,那么很不幸,这个观察者的dealloc方法永远不会被调用,他的retainCount最少也是1,因为通知中心retain了一次,结果[[NSNotificationCenter defaultCenter] removeObserver:self];就永远不被调用。


所以正确的做法是按照官方例子中的方法来做,而这么做的时候我们不妨多想想为什么应该那么做

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: