KVO 浅谈
最近看到一個題,KVO ?KVC實現原理。
早前只是會使用,而且使用頻率極低,通常遇到需要監聽的情況,直接在屬性 set方法里添加要處理的邏輯,直到看到這問題?
KVO: ?Key Value Observer
作用: ?鍵值監聽
通常情況的使用上一段代碼
person 在 addObserver 之后會發生變化可見,會在為WDPerson 動態生成一個新的子類NSKVONotifying_WDPerson?
?
person1的isa指針 指向 NSKVONotifying_WDPerson
person2的isa指針 指向 WDPerson
通過runtime 查看一下 NSKVONotifying_WDPerson都有哪些函數
setAge:, ?class, ?dealloc,_ ?isKVOA,
重寫Class 在圖一中可見 再次輸出class 依然是WDPerson所以僅是系統重寫class是為了不讓我們發現類已經發生了變化。
isKVOA 應該就是要標記一下是否為KVO動態生成的類
當有多個監聽值,想指定有些不必一直監聽并且想手動觸發可以在類中 重寫automaticallyNotifiesObserversForKey
導入hopper 查看WDPerson setage方法?
?手動觸發方法就? 只要在set方法中添加即可
[self willChangeValueForKey:@"age"];
? ? _age = age;
?[self didChangeValueForKey:@"age"];
?
總結
- 上一篇: iis和mysql_iis mysql
- 下一篇: 常见服务器默认管理口地址