通過KVC修改屬性會(huì)觸發(fā)KVO嗎
會(huì)觸發(fā)
KVC的賦值和取值過程是怎么樣的 原理是什么
KVC
KVC的全稱是Key-Value Coding 俗稱"鍵植編碼" 可以通過一個(gè)key來訪問某個(gè)屬性
常見的API有
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- (void)setValue:(id)value forKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
- (id)valueForKey:(NSString *)key;
setValue:forKey:的原理

setValue:forKey:的原理.png
accessInstanceVariablesDirectly方法的默認(rèn)返回值是YES
valueForKey:的原理

valueForKey:的原理.png
當(dāng)沒有設(shè)置為屬性 只是成員變量 直接使用KVC改變值 也會(huì)觸發(fā)KVO 是因?yàn)楸举|(zhì)上底層是使用了手動(dòng)觸發(fā)KVO的方法 willChangeValueForKey didChangeValueForKey