KVO
- kvo 全稱是Key-Value Observing 俗稱鍵值監(jiān)聽,可以用來監(jiān)聽一個對象屬性值的改變。

C48BFA40-41B7-4846-BA1B-2B9590A27709.png
未使用KVO監(jiān)聽

683CD78E-670E-4A7A-B54E-75D527C87985.png
使用了KVO監(jiān)聽

9F2333C9-D8CB-4C11-AC62-A5DA79093320.png
NSSetValueAndNOtify的內(nèi)部實現(xiàn)
[self willChangeValueForkey:@"age"];
//原來的setter實現(xiàn)
[self didChangeValueForkey:@"age"];
調(diào)用willChangeValueForKey;
調(diào)用原來的setter實現(xiàn)
調(diào)用didChangeValueForKey;
didChangeValueForKey:回調(diào)用observer的observerValueForKeyPath:ofObject:change:context方法。
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:的原理
8716F928-DFC4-47A3-AD26-9DC0267562F5.png
accessInstanceVariablesDirectly 方法返回默認值為YES
-
valueForKey:的原理
B8143DD9-DD7B-4D68-A85A-EF2AF7D459FC.png

