啊嘴  

当一个类中定义一个实例变量时,没有给实例变量提供限时属性(默认是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);
        
posted on 2015-12-21 22:31  啊嘴  阅读(540)  评论(0编辑  收藏  举报