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 时应用程序崩溃

UITableview 释放因 KVO 错误而崩溃

XCTest 测试方法中的 KVO addObserver 逻辑崩溃

Swift - 使用两个不同的OperationQueue和KVO时应用程序崩溃

在没有调用 viewDidLoad 的情况下调用了 Dealloc(删除 KVO 观察者时崩溃)