KVC,即是指 [NSKeyValueCoding],一個非正式的 Protocol,提供一種機(jī)制來間接訪問對象的屬性。注意這里的間接一詞,后面會講道為什么是間接。
一個對象擁有某些屬性。比如說,一個 Person 對象有一個 name 和一個 age 屬性。以 KVC 說法,Person 對象分別有一個 value 對應(yīng)他的 name 和 age 的 key。 key 只是一個字符串,它對應(yīng)的值可以是任意類型的對象。從最基礎(chǔ)的層次上看,KVC 有兩個方法:一個是設(shè)置 key 的值,另一個是獲取 key 的值。
直接上代碼,可以復(fù)制過去運(yùn)行一下看看:
- (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調(diào)用隱藏的方法來做一些事情
**/
//利用KVC來修改placeholder的字體顏色
[self.textField setValue:[UIColor redColor] forKeyPath:@"placeholderLabel.textColor"];
//利用KVC來調(diào)用隱藏的方法來做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"]);
}
運(yùn)行結(jié)果如下:

image.png
何為間接?就是有些方法是隱藏的,沒有暴露出來,通過KVC可以間接的去調(diào)用他們來完成一些事情,不需要自己去實(shí)現(xiàn),比如這些基本的方法經(jīng)常會用到。