KVC
除了常用的set/get方法取值赋值之外,还可以使用键值编码的方式赋值取值
(说直接点,就是一个类,可以直接通过setValueForKey的方式赋值和取值)
iOS中我们每次声明一个成员变量,一般使用@property的方式,该方式默认存在set和get方法,但除此之外,我们使用如下方法亦可:
类PoClass,有个成员变量name
@class Course;
@interface PoClass : NSObject
{
NSString *name;
}
@end
如果name没有@property
PoClass *po = [[PoClass alloc]init]
[po setValue:@"polen" forKey:@"name"];
NSString *getName = [po valueForKey:@"name"]
[po setValue:@"polenPath" forKeyPath:@"course.name"];
NSString *getName = [po valueForKeyPath:@"course.name"];
key的方式和path的方式,可以理解为对setter和getter方式的补充。
如果有setter/getter方法,则优先会调用setter/getter方法,没有则通过查看_key或者key的value.
参照推酷:
首先去检查是否存在setter,getter方法,如果不存在,它将在内部查找名_key或key的实例变量。如果
还是没有那就会报错误。通过KVC 可以获取不存在getter方法的对象值,无需通过对象指针直接访问。
【注意】:当我们通过setValue:forKey:设置对象的值,或者valueForKey:来获取对象的值时,如果对象的实例变量为基本数据类型时(例如:char,int,float,BOOL),我们需要对这些数据类型进行封装。
网友评论