不能觀察對(duì)象
KVO,即:Key-Value Observing,它提供一種機(jī)制,當(dāng)指定的對(duì)象的屬性被修改后,則對(duì)象就會(huì)接受到通知。簡(jiǎn)單的說(shuō)就是每次指定的被觀察的對(duì)象的屬性被修改后,KVO就會(huì)自動(dòng)通知相應(yīng)的觀察者了
KVO是一個(gè)對(duì)象能夠觀察另外一個(gè)對(duì)象的屬性的值,并且能夠發(fā)現(xiàn)值的變化。這是一個(gè)對(duì)象與另外一個(gè)對(duì)象保持同步的一種方法,即當(dāng)另外一種對(duì)象的狀態(tài)發(fā)生改變時(shí),觀察對(duì)象馬上作出反應(yīng)。它只能用來(lái)對(duì)屬性作出反應(yīng),而不會(huì)用來(lái)對(duì)方法或者動(dòng)作作出反應(yīng)。
實(shí)現(xiàn)原理:當(dāng)為某一個(gè)對(duì)象屬性注冊(cè)監(jiān)聽(tīng)的時(shí)候,該對(duì)象的isa指針就會(huì)指向一個(gè)中間類(lèi),而不是本來(lái)對(duì)象真實(shí)的類(lèi)。所以說(shuō),對(duì)象的isa指針可以改變,我們的程序最好不要依賴isa指針。
簡(jiǎn)而言之就是:
1、當(dāng)一個(gè)object有觀察者時(shí),動(dòng)態(tài)創(chuàng)建這個(gè)object的類(lèi)的子類(lèi)
2、對(duì)于每個(gè)被觀察的property,重寫(xiě)其set方法
3、在重寫(xiě)的set方法中調(diào)用- willChangeValueForKey:和- didChangeValueForKey:通知觀察者
4、當(dāng)一個(gè)property沒(méi)有觀察者時(shí),刪除重寫(xiě)的方法
5、當(dāng)沒(méi)有observer觀察任何一個(gè)property時(shí),刪除動(dòng)態(tài)創(chuàng)建的子類(lèi)