关于KVC的那些事儿

最近一直在研究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值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    黑暗中的孤影阅读 50,218评论 74 441
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    朽木自雕也阅读 5,535评论 6 1
  • KVC(Key-value coding)键值编码,iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,...
    CALayer_Sai阅读 7,414评论 0 4
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    Fendouzhe阅读 3,947评论 0 6
  • KVC简单介绍 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key...
    公子无礼阅读 5,321评论 0 6

友情链接更多精彩内容