什么是KVO?
key - value -observing
是一種觀察者設計模式
系統(tǒng)采用 isa (isa-swizzling)混寫來實現(xiàn)KVO
KVO實現(xiàn)流程是什么?

屏幕快照 2018-11-14 下午5.19.44.png
系統(tǒng) NSKVONotifying_A 的setter實現(xiàn)

屏幕快照 2018-11-14 下午5.25.46.png
通過 KVC 設置新value的時候會觸發(fā) KVO
是因為KVC調用了類的setter方法
直接改變成員變量的值卻不會觸發(fā),需要手動添加 willChangeValueForKey 觸發(fā)KVO
//直接為成員變量賦值
[self willChangeValueForKey:@"value"];
_value += 1;
[self didChangeValueForKey:@"value"];
總結:
使用setter方法改變值 KVO會生效
使用 setvalue forkey 改變值 KVO會生效
成員變量直接修改 需要手動添加KVO才會修改