KVC(Key-Value Coding) 键值编码
通过指定表示要访问的属性名字的字符串标示符,可以进行类的属性读取和设置
KVC提供了一种在运行时而非编译时动态访问对象属性与实例变量的方式
KVC的基本调用方法:
setValue:(NSString *) forKey:(NSString *) :方法以字符串的形式向对象发送消息,可以设置对象实例变量的值。第一个参数为要设置的值(Object-C 对象),第二个参数为字符串,是对象的属性名称或者实例变量名称。
valueForKey:(NSString *):方法以字符串的形式向对象发送消息,用于获取对象中实例变量的值。参数为字符串,是对象的属性名称或者实例变量。
Student *student = [Student new];
//赋值
[student setValue:@"Rick" forKey:@"_name"];
[student setValue:@25 forKey:@"_age"];
[student setValue:@"GZ" forKey:@"_address"];
NSLog(@"%@",[student description]);
//访问
NSString *studentName = [student valueForKey:@"name"];
NSNumber *studentAge = [student valueForKey:@"age"];
NSString *studentAddress = [student valueForKey:@"address"];
NSLog(@"%@,%@,%@",studentName,studentAge,studentAddress);
//动态访问默写属性时,使用一些可以在运行时而不是编译时改变的值 的例子
student.p1 = 1;
student.p2 = 2;
student.p3 = 3;
int num = [student getValuePropertyName:@"p1"];
NSLog(@"%d",num);
int num1 = [student getValuePropertyNewName:@"p2"];
NSLog(@"%d",num1);
//键路径编码
Book *book = [Book new];
[student setValue:book forKeyPath:@"_book"];
[student setValue:@"Harry potter" forKeyPath:@"book._bookName"];
NSLog(@"%@",book);
NSString *bookName = [student valueForKeyPath:@"_book._bookName"];
NSLog(@"%@",bookName);