說實(shí)話,平時(shí)不怎么用KVO,由于前段時(shí)間的自己想封裝一個(gè)無數(shù)據(jù)的占位圖,于是就需要用到的KVO的東西萨脑。
1.觀察者監(jiān)聽誰。
比如我要監(jiān)聽“KVOArr”
//添加觀察者
[self addObserver:self forKeyPath:@"KVOArr" options:NSKeyValueObservingOptionNew context:nil];
堅(jiān)聽觀察對(duì)的吧饺饭。監(jiān)聽就是監(jiān)聽這個(gè)對(duì)象的指針對(duì)吧渤早,那如果我在下邊設(shè)置這樣設(shè)置。
_KVOArr = Arr;
我這樣將一個(gè)數(shù)組的指針給KVOArr瘫俊。KVOArr的值鹊杖,和指針相應(yīng)的都發(fā)生了變化對(duì)吧。實(shí)際上這樣寫扛芽,KVO是監(jiān)聽不到的骂蓖,也就不會(huì)走監(jiān)聽的額回調(diào)方法。
必須要 self.KVOArr = Arr; 或者你直接KVOArr alloc之后呢就開始賦值川尖。
小問題登下,我們不做深究。
2.KVO崩潰
KVO崩潰一班是沒有在dealloc里面寫removeObserver這個(gè)方法對(duì)吧叮喳。但是今天我意外的發(fā)現(xiàn)了一個(gè)東西被芳。我是沒能發(fā)現(xiàn)原理是什么,在此若有哪位大神知道可否告知小弟馍悟,小弟感激不竟啊畔濒。
我發(fā)現(xiàn)的崩潰信息是這樣的,我寫了dealloc方法锣咒,Viewcontroller1里面有KVO侵状,然后viewcontroller1里面寫的有dealloc方法,按理來說再怎么滴都不會(huì)崩潰啦毅整,但是我Viewcontroller2是1的二級(jí)視圖趣兄。viewcontroller2里面也有KVO里面也寫啦dealloc方法,就是i 這樣一級(jí)視圖進(jìn)入二級(jí)視圖悼嫉。再出來艇潭,再進(jìn)去,如此,就崩潰了暴区。
我試試,是不是dealloc方法走得多了辛臊。我在監(jiān)聽方法里[self addObserver:self forKeyPath:@"KVOArr" options:NSKeyValueObservingOptionNew context:nil];
我把context加上仙粱,一級(jí)視圖的和二級(jí)視圖的區(qū)分開,可是還是崩潰彻舰。是在不知道為啥伐割,最后只好用鱉的方法實(shí)現(xiàn)的了,如果有人遇到這種問題刃唤,可以一塊交流隔心,待我哪天研究出來再補(bǔ)上解決方法。