KVC 是 Key-Value Coding 的缩写,即键值编码。它是一种通过字符串间接访问对象的属性和方法的机制。使用 KVC,可以通过字符串来访问对象的属性和方法,而不需要知道对象的实际类型和结构。KVC 是 Cocoa 框架中的一个重要特性,被广泛用于数据绑定、键值观察等方面。
KVO 是 Key-Value Observing 的缩写,即键值观察。它是一种通过观察对象的属性值变化来实现通知机制的机制。使用 KVO,可以在对象的属性值发生改变时,自动地向观察者发送通知。KVO 是 Cocoa 框架中的一个重要特性,被广泛用于 MVC 模式、数据绑定等方面。
KVC 和 KVO 的作用:
KVC 可以简化代码,提高代码的可读性和可维护性。使用 KVC,可以通过字符串来访问对象的属性和方法,而不需要知道对象的实际类型和结构。
KVO 可以实现观察者模式,提供一种方便的通知机制。使用 KVO,可以在对象的属性值发生改变时,自动地向观察者发送通知。
举例:
- 使用 KVC 访问对象属性:
// 创建一个 Person 对象
Person *person = [[Person alloc] init];
// 使用 KVC 设置对象属性
[person setValue:@"张三" forKey:@"name"];
// 使用 KVC 获取对象属性
NSString *name = [person valueForKey:@"name"];
- 使用 KVO 监听对象属性:
// 创建一个 Person 对象
Person *person = [[Person alloc] init];
// 添加观察者
[person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
// 修改对象属性
person.name = @"李四";
// 观察者回调方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
if ([keyPath isEqualToString:@"name"]) {
NSString *newName = [change objectForKey:NSKeyValueChangeNewKey];
NSLog(@"name changed to %@", newName);
}
}
在例子中,我们使用 KVC 设置了 Person 对象的 name 属性,并使用 KVO 监听了 Person 对象的 name 属性变化。当 name 属性发生变化时,会自动地向观察者发送通知,并调用观察者回调方法。