NSNotificationCenter管理
2015-06-29 14:29
309 查看
最近做项目遇到一个问题,本来以为是segue的问题,查了一下发现是NSNotificationCenter的问题
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Could not find a navigation controller for segue 'mapToBusLineVC'. Push segues can only be used when the source controller
is managed by an instance of UINavigationController.'
当某个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];就永远不被调用。
所以正确的做法是按照官方例子中的方法来做。
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Could not find a navigation controller for segue 'mapToBusLineVC'. Push segues can only be used when the source controller
is managed by an instance of UINavigationController.'
当某个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];就永远不被调用。
所以正确的做法是按照官方例子中的方法来做。
相关文章推荐
- java使用String.split方法时要注意的问题
- oracle和sql server中回车符和换行符的sql代码
- alipay--- Android 集成支付宝SDK实现快捷支付--详解
- C#趣味程序---爱因斯坦的台阶问题
- 【原创】Linux 内核模块编程
- wpf控件之间互相绑定
- javascript中apply()方法解析-简单易懂!
- 判断软键盘的弹出
- string和stringstream用法总结
- 新的开始
- C语言static
- MapReduce作业配置参数
- Oracle 动态 SQL
- java学习之旅41--面向对象_14_继承_super_构造器的调用_继承的内存分析(非常重要)
- Hibernate get和load的区别
- 完全面向于初学者的Node.js指南
- [转]AndroidTolls国内镜像
- 大网站记录
- 黑马程序员——java基础之String
- iOS面试题集锦