iOS没有移除通知也不会崩溃问题
2017-09-29 14:50
253 查看
今天无意中又捯饬了下观察者模式,发现现在项目里同事写的的通知没有进行移除,可是控制器销毁后竟然没有崩溃,查了下资料也没有找到很直观的解释(也可能关键字搜索问题
),就查了下API,有综合了下网上看到的各种博客文章,只是个人理解,还望指正
这里先说下,之所以没有崩溃是因为在iOS9.0后我们才不用移除也不会有异常,而在9.0之前我们还是要手动移除的,这里需要大家注意下
我们都知道在 iOS 开发中我们会经常用到NSNotificationCenter用于对象间通信方式,特别是在针对一对多和跨层通信的时候,而在观察者注册时,通知中心并没有对观察者对象做 retain
处理,而是对观察者对象进行unsafe_unretained 引用,而usafereference与weak
reference的区别是当被引用的对象释放时不会自动置为nil,也就是成了野指针,而weak会当被引用的对象释放时自动置为nil,所以也就导致了我们在iOS9.0之前没有手动移除通知的时候对象被释放掉而通知中心就成了野指针,所有造成了崩溃问题,然后在iOS9.0之后通知中心对观察者做了弱引用
),就查了下API,有综合了下网上看到的各种博客文章,只是个人理解,还望指正
这里先说下,之所以没有崩溃是因为在iOS9.0后我们才不用移除也不会有异常,而在9.0之前我们还是要手动移除的,这里需要大家注意下
我们都知道在 iOS 开发中我们会经常用到NSNotificationCenter用于对象间通信方式,特别是在针对一对多和跨层通信的时候,而在观察者注册时,通知中心并没有对观察者对象做 retain
处理,而是对观察者对象进行unsafe_unretained 引用,而usafereference与weak
reference的区别是当被引用的对象释放时不会自动置为nil,也就是成了野指针,而weak会当被引用的对象释放时自动置为nil,所以也就导致了我们在iOS9.0之前没有手动移除通知的时候对象被释放掉而通知中心就成了野指针,所有造成了崩溃问题,然后在iOS9.0之后通知中心对观察者做了弱引用
相关文章推荐
- iOS 控制器POP后dealloc方法不走,通知监听无法移除的问题
- IOS -- 调用deleteRowsAtIndexPaths:withRowAnimation:崩溃的问题
- iOS——tableView和适配、键盘弹出发送通知问题
- Xcode8 ios 10 调用相机、相册、麦克风、位置等隐私问题崩溃解决办法
- iOS接入支付宝#include <openssl/asn1.h>没有发现 的问题
- iOS通知观察者的添加和移除
- 解决Windows系统崩溃Linux系统却没有任何问题的错误
- iOS开发Debug之UIAlertViewController在iPad弹出崩溃问题
- ios开发使用cocoapods倒入一堆的三方库之后开始崩溃了。发觉是导入极光引用的iOS10UserNotifications.framework导致的问题 Reason: image not found
- ios 上浏览器返回上一页不会刷新页面问题,页面初始化的方法不执行
- Fragment应用放置后台很久再次进入不会重新刷新数据展示、或者直接崩溃问题解决
- iOS开发中测试机或者模拟器运行时程序没有占整个屏幕问题
- iOS 10.0系统麦克风、相机权限崩溃问题解决 —— HERO博客
- 关于 TestFlight 新提交的版本没有出现在 测试用户列表中的问题 iOS Swift
- 注册的 通知,即使pop也要移除掉的,因为,再进入还会 加新的,不会覆盖掉的,
- iOS 开发中问题 ——使用xib拖拽控件操作其约束并添加动画没有效果的问题
- iOS 8.3 ios9 横屏弹出alertview 崩溃问题
- ios包运行就崩溃的问题之一
- iOS,关于真机tableViewCell上面button响应事件,不同版本崩溃问题解决
- iOS 通知和kvo中的线程问题