关于KVO的一些注意事项

说实话,平时不怎么用KVO,由于前段时间的自己想封装一个无数据的占位图,于是就需要用到的KVO的东西。

1.观察者监听谁。

比如我要监听“KVOArr”

//添加观察者

[self addObserver:self forKeyPath:@"KVOArr" options:NSKeyValueObservingOptionNew context:nil];

坚听观察对的吧。监听就是监听这个对象的指针对吧,那如果我在下边设置这样设置。

_KVOArr = Arr;

我这样将一个数组的指针给KVOArr。KVOArr的值,和指针相应的都发生了变化对吧。实际上这样写,KVO是监听不到的,也就不会走监听的额回调方法。

必须要 self.KVOArr = Arr; 或者你直接KVOArr alloc之后呢就开始赋值。

小问题,我们不做深究。

2.KVO崩溃

KVO崩溃一班是没有在dealloc里面写removeObserver这个方法对吧。但是今天我意外的发现了一个东西。我是没能发现原理是什么,在此若有哪位大神知道可否告知小弟,小弟感激不竟啊。

我发现的崩溃信息是这样的,我写了dealloc方法,Viewcontroller1里面有KVO,然后viewcontroller1里面写的有dealloc方法,按理来说再怎么滴都不会崩溃啦,但是我Viewcontroller2是1的二级视图。viewcontroller2里面也有KVO里面也写啦dealloc方法,就是i 这样一级视图进入二级视图。再出来,再进去,如此,就崩溃了。

我试试,是不是dealloc方法走得多了。我在监听方法里[self addObserver:self forKeyPath:@"KVOArr" options:NSKeyValueObservingOptionNew context:nil];

我把context加上,一级视图的和二级视图的区分开,可是还是崩溃。是在不知道为啥,最后只好用鳖的方法实现的了,如果有人遇到这种问题,可以一块交流,待我哪天研究出来再补上解决方法。

你可能感兴趣的:(关于KVO的一些注意事项)