最近一直在研究KVC,所以和大家分享一下心得吧。KVC,即键值编码,它提供了一种通过使用属性的名称来间接访问对象属性的方法。我们使用KVC时用到的最多的两个方法如下:
基本调用方法这两个方法可以在接收消息对象没有实现所访问的属性setter和getter方法的情况下,依然为该属性进行赋值和取值操作,私有变量也是如此。
我们可以定义一个类:
.h文件如下:
.m文件如下:
然后我们随便在一个控制器的view did load里对这个类进行初始化:
运行结果如下:
carName已经被正确赋值接下来我们再看下运用KVC能否对类的私有变量进行取值赋值操作:
普通的赋值方式编译都通不过:
我们换用KVC方式访问如下:
运行结果如下:
也就是说,OC里面并没有真正的私有变量,只要知道变量名称就可以访问并且操作这个变量。
说到这里,还有一个方法setValue:ForKeyPath:,可以通过键路径来操作属性内部的变量
注意别忘了初始化carNumber,否则赋值为nil运行结果如下:
总结:
KVC是所有的NSObject都具有的特性,利用KVC我们可以为一个类填充很多的属性,当目标类调用setValue:forKey:赋值时,如果目标类里没有这个key,为了防止程序崩溃,我们需要手动实现setValue:(id)value forUndefinedKey:(NSString*)key和valueForUndefinedKey:(NSString*)key这两个方法,用一个字典去接收value,同理,取值时用valueForUndefinedKey:(NSString*)key,根据key从字典取相应的value值。
网友评论