假设我们对A ViewController(暂时叫AVC)进行的一个属性P进行KVO.那么在AVCdealloc的时候,removeKVO,是没有问题的.
但是,如果我们对AVC中的一个组件B的属性进行KVO,在 AVC dealloc的时候去remove KVO,就有一定概率crash,crash信息就是KVO没有被移除,对象B却已经释放了.
在MRC的时候,我们可以这样写AVC的dealloc:
- (void)dealloc
{
//remove KVO here
//release B here
[super dealloc];
}
我们手动管理B的释放,因此我们可以保证KVO的remove在B的release之前.这样完全不会有任何隐患.
但是ARC以后,我们不能手动控制B的release了,AVC的代码如下:
- (void)dealloc
{
//remove KVO here
}
我们能做的事只有remove KVO.但是AVC的B组件的dealloc时机是不确定,有可能在执行到remove之前,B已经释放了.就会造成crash.
解决办法1:重写B组件的dealloc方法,保证KVO的移除在B的释放之前.
解决办法2:在AVC的appear和disappear方法里,加上KVO的监听和移除逻辑.
分享到:
相关推荐
KVO,KVC在MAC下的小DEMO,喜欢的换就拿去吧
这是一个小的KVO的demo实现的kvo的效果,对于初学kvo的朋友有一些帮助
简单说明KVO的运行机制,说明KVO的工作原理,一目了然的代码!适合每个人!
用KVO实现动态改变tableCell里的显示(例子源于《iOS7编程实战》第22章。仅供自己以后学习参考使用
利用KVO,当UIButton属性改变时,实现方法 Kvo是Cocoa的一个重要机制,他提供了观察某一属性变化的方法,极大的简化了代码。这种观察-被观察模型适用于这样的情况,比方说根据A(数 据类)的某个属性值变化,B...
KVO监听UI控件的frame变化,kVO的简单使用
ios kvo原理的实现demo
kvo的ios代码,kvo即创建一个观察者,当观察的对象的属性发生变化时,观察者就会去执行某些相应的事件
这是在项目中是用KVO来进行强化对KVO的深入理解
KVO-----当对象某个属性(例如 demo 中的字符串 name)发生更改时,对象会获得通知,并作出相应处理,本demo用Runtime实现KVO原理。
一句话使用KVO,使用完无需自己移除KVO
关于ios学习中的通知和kvc,kvo案例的整理,基础的oc学习
KVO的简单使用 该工程 简单明了 明确KVO如何使用
已经拥有一年经验的你真的了解KVC,KVO吗?也许不!以前我以为自己都有上架项目,这都是太基础的东西,但今天我重新回头看了以前做的笔记,真的是书读百遍,其义自见。
Swift5.2 KVO
MVC KVO实现
iOS kvo的一个例子下载,仅供下载,多谢
ios kvo 简单使用。
kvo实现原理blog:http://blog.csdn.net/dolacmeng/article/details/72579754
http://blog.csdn.net/qqmcy/article/details/50635252 kvo实现说明