1. 程式人生 > >【OC底層】KVC原理

【OC底層】KVC原理

 定義

KVC的全稱是Key-Value Coding,俗稱“鍵值編碼”,可以通過一個key來訪問某個屬性

常見的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:的原理

accessInstanceVariablesDirectly

 :是否允許訪問成員變數,預設YES

 這個方法有個應用場所就是如果你自己寫框架,你的一些私有的變數不想被外部通過KVC的方式去修改,就可以重寫這個方法,返回 NO 即可!

valueForKey:的原理

 

通過KVC修改屬性值或者成員變數值會觸發KVO嗎? 

 答案是肯定可以的。因為無論你物件有沒有set方法,KVC底層都會呼叫 willChangeValueForKey 和 didChangeValueForKey,上一篇我們說過只要手動呼叫這兩個方法,KVC就會被呼叫。