当一个类中定义一个实例变量时,没有给实例变量提供限时属性(默认是protected),而且在声明和实现文件中也没有给这个实例变量
设置getter和setter的方法。
那么一般情况下这个实例变量是不能被赋值和得到的。
但是KVC可以通过setValue方法给类名赋值并且提取出来;
假设 _name为student类中的实例变量,并且没有提供getter和setter方法
student *stu = [student alloc]init]; //给stu实例对象分配并且初始化
[stu setValue:@"kyrie" forKey;@"_name"]; //给stu实例对象中名字叫做_name的实例变量进行赋值赋值为(kyrie)
NSString *mingzi = [stu valueForKey:@"_name"];//通过valueForKey方法提取出_name中的值赋值给mingzi
NSlog(@"%@",mingzi);
最后输出结果为kyrie。
2、如果访问这个类里中的属性中的属性呢?那就用到了键路径
setValue:<#(id)#> forKeyPath:<#(NSString *)#>
属性中的属性使用点
例如,student继承NSObject 而Cstudent继承student
student{
NSStirng * number;
}
Cstudent
{
number * classnumber;
}
那么键路径使用方法就是number.classnumber.
基本使用方法跟上面的方法一致。
[student setValue:@"数学课" forKeyPath:@"course.CourseName"]; courseName = [student valueForKeyPath:@"course.CourseName"]; NSLog(@"课程名称:%@", courseName);