KVC,即是指 [NSKeyValueCoding],一个非正式的 Protocol,提供一种机制来间接访问对象的属性。注意这里的间接一词,后面会讲道为什么是间接。
一个对象拥有某些属性。比如说,一个 Person 对象有一个 name 和一个 age 属性。以 KVC 说法,Person 对象分别有一个 value 对应他的 name 和 age 的 key。 key 只是一个字符串,它对应的值可以是任意类型的对象。从最基础的层次上看,KVC 有两个方法:一个是设置 key 的值,另一个是获取 key 的值。
直接上代码,可以复制过去运行一下看看:
- (UITextField *)textField {
if (!_textField) {
_textField = [[UITextField alloc] initWithFrame:CGRectMake(50, 100, 200, 30)];
_textField.placeholder = @"这是一个Demo";
[self.view addSubview:self.textField];
}
return _textField;
}
- (void)viewDidLoad {
[super viewDidLoad];
/**
利用KVC调用隐藏的方法来做一些事情
**/
//利用KVC来修改placeholder的字体颜色
[self.textField setValue:[UIColor redColor] forKeyPath:@"placeholderLabel.textColor"];
//利用KVC来调用隐藏的方法来做count,max,min,sum
NSMutableArray *array = [NSMutableArray new];
PersonModel *person = [PersonModel new];
person.age = 30;
PersonModel *person1 = [PersonModel new];
person1.age = 20;
PersonModel *person2 = [PersonModel new];
person2.age = 50;
[array addObject:person];
[array addObject:person1];
[array addObject:person2];
NSLog(@"%@",[array valueForKey:@"@count"]);
NSLog(@"%@",[array valueForKeyPath:@"@max.age"]);
NSLog(@"%@",[array valueForKeyPath:@"@min.age"]);
NSLog(@"%@",[array valueForKeyPath:@"@sum.age"]);
}
运行结果如下:
何为间接?就是有些方法是隐藏的,没有暴露出来,通过KVC可以间接的去调用他们来完成一些事情,不需要自己去实现,比如这些基本的方法经常会用到。