键值编码 权限非常强大,可以访问对象属性,包括私有 一般不推荐使用破坏了封装性.KVC 设置时如果此属性有 set get 方法就优先调用,否则 set get.
KVC 键值编码 是 KeyValue Coding 的简称,它是一种可以直接通过字符串的名字(key)来访问类属性的机制.使用该机制不需要调用存取方法和变量实例就可以访问对象属性.本质上讲,键-值编码定义了你的程序存取方法需要实现的样式及方法签名.
在应用程序中实现键-值编码兼容性是一项重要的设计原则.存取方法可以加强合适的数据封装,而键-值编码方法在多数情况下课简化程序代码.
键-值编码方法在 Objective-C 非标准协议(类目)NSKeyValueCoding 中被声明,默认的实现方法由 NSObjective 提供.
键-值编码支持带有对象值的属性,同时也支持纯数值类型和结构,非对象参数和返回类型会被识别并自动封装/解封.
例:定义一个类
.h 文件
@interface Person : NSObject{
@private
NSString *_name;
}
@end
.M 文件 覆写description方法
-(NSString *)description {
NSString *s = [NSString stringWithFormat: @"name=%@",_name];
return s;
}
@end
main.m 方法
Person *p = [[Person alloc] init];
//通过 KVC 对属性设置
[p setValue:jack forKey:@"name"; // value 属性的值 .key 是属性名 这里和之前的_ name 不一样,没待下划线,但可以用,这里的机制是先找xxx 和找不到就找_ xxx
NSLog(@"%@",p);
//基本数据类型设值,要转成 NSNumber //@22 而不能直接写22
[p setValue:@22 forKey@"age"
//通过 KVC 获取属性值
NSString *name = [p valueForKey:@"name"];
NSLog(@"name = %@", name);