一、KVC (Key-Value Coding) 键值编码
1.1 基本概念
KVC 是一种通过字符串键名间接访问对象属性的机制,而不是通过调用访问器方法。
1.2 核心方法
objectivec
objective-c
// 设置值
- (void)setValue:(id)value forKey:(NSString *)key;
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
// 获取值
- (id)valueForKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
二、KVO (Key-Value Observing) 键值观察
2.1 基本概念
KVO 允许对象监听另一个对象属性的变化,实现观察者模式。
2.2 基本使用
objectivec
objective-c
// 1. 注册观察者
- (void)addObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath
options:(NSKeyValueObservingOptions)options
context:(void *)context;
// 2. 实现观察方法
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSKeyValueChangeKey,id> *)change
context:(void *)context;
// 3. 移除观察者
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;
总结
KVC 和 KVO 是 iOS 开发中强大的工具,但需要谨慎使用:
KVC 适用场景:
-
动态访问属性
-
字典与模型转换
-
使用集合运算符进行数据聚合
KVO 适用场景:
-
模型到视图的数据绑定
-
观察配置变化
-
监听对象状态改变
注意事项:
-
总是成对使用 add/remove Observer
-
注意线程安全问题
-
避免过度使用,考虑性能影响
-
在 Swift 中使用时注意
@objc dynamic标记