
KVO(Key-Value Observing)模式又可以稱之為觀察者模式,它提供一種機(jī)制,當(dāng)指定的對象的屬性被修改后,則對象就會接受到通知。簡單的說就是每次指定的被觀察的對象的屬性被修改后,KVO就會自動通知相應(yīng)的觀察者了。
IOS中KVO的使用方法
IOS框架中是支持KVO的,用戶只需要使用官方提供的API就可以直接實現(xiàn)對應(yīng)的功能。
- 注冊觀察者,實施監(jiān)聽;
- 在回調(diào)方法中處理屬性發(fā)生的變化;
- 移除觀察者;
也就是注冊——>通知——>撤銷注冊的過程。
KVO的工作原理
在官方文檔中對KVO的介紹是一筆帶過的,并沒有什么有用的信息,于是我試著使用最簡單的方式看了下KVO的實現(xiàn)過程,下面上代碼。
//我們實例化一個對象
self.person = [Person new];
//給這個對象的成員變量賦值
self.person.age = 18;
//這里打印下該對象的isa指向
NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);
//然后我們將該對象注冊成為觀察者
[self.person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
//再次打印該對象的isa指向
NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);
通過上面的代碼我們可以看到輸出結(jié)果已經(jīng)變成了‘SKVONotifying_Person’這個類,由此來看,KVO的原理應(yīng)該是在一個原有類的基礎(chǔ)上,由系統(tǒng)自動生成一個該類的分類,并在分類中重寫成員變量的setter方法,當(dāng)setter方法被調(diào)用發(fā)出對應(yīng)的通知。
事后我又在網(wǎng)上看了些相關(guān)的文章,其中簡書作者啊左~的一篇文章很是受用,如果各位有興趣更深入的研究可以點這條鏈接繼續(xù)觀看。
KVO的實現(xiàn)原理與具體應(yīng)用-? by:啊左~