KVO使用不当导致的崩溃
Posted 亲爱的八
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVO使用不当导致的崩溃相关的知识,希望对你有一定的参考价值。
现象:对象被释放时崩溃
原因:对象有未移除的观察者
记录一下自己解决问题的过程,反思自己在解决问题过程中是不是方法得当:
今天遇到一个莫名崩溃——属性被赋值的时候崩溃。像这样
console没有任何提示。
楼主开始只注意到1、2,着手调查breakPoint 1.1是啥。走了一些弯路。其实真正的通关提示语在3。
可以从3中看到这样一个信息NSKVODeallocate,这就基本确定是kvo使用不当造成的。
kvo造成的崩溃我只遇到过两种,一种是释放对象时对象上有未移除的观察者,第二种是移除从未注册过或已移除过的观察者。
说到这,聪明的你是不是想到了什么
属性赋值意味着新属性对象的retain count+1,老属性对象的retain count-1,所以老属性对象有被释放的可能
容易联想到第一种崩溃情况(当然,这都是马后炮,事实上了楼主并没有想到这里。楼主只是去搜了“属性赋值 崩溃 ios”
以上是关于KVO使用不当导致的崩溃的主要内容,如果未能解决你的问题,请参考以下文章
为啥我使用 NSManagedObject 在 self 上获得基于块的崩溃清除 KVO?
Swift - 使用两个不同的 OperationQueue 和 KVO 时应用程序崩溃
XCTest 测试方法中的 KVO addObserver 逻辑崩溃