iOS核心笔记—KVC机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS核心笔记—KVC机制相关的知识,希望对你有一定的参考价值。

1、KVC(键值编码)

【1】、什么是KVC?

  • KVC俗称键值编码,就是可以通过一系列方法(KVC方法)根据对象的属性名称作为key值,传入具体的value值赋值给对象的属性。

【2】、KVC的作用

  • 通常,当字典中的key与对象的属性名称完全相同时,这是我们能够通过使用KVC将字典中的value值设置给对象的属性;不过,切记:对象中的属性只能比字典中的key多而不能少,一旦字典中的key在对象中找不到与之对应的属性,程序崩溃;这也是KVC一个最致命的缺点。

【3】、KVC三种形式

  • key中不包含路径:

    • 使用setValue:forKey:方法给对象属性赋值: 技术分享

    • 使用valueForKey方法取出对象的属性值: 技术分享

    • 数组使用valueForKey方法且key中不包含路径,将会抽取数组中所有对象的对应属性组成一个新的数组返回: 技术分享

  • key中包含路径:

    • 使用setValue:forKeyPath:方法给对象属性赋值: 技术分享

    • 使用valueForKeyPath方法取出对象的属性值: 技术分享

    • 同理,数组使用valueForKeyPath方法,也能够将数组中对象的key属性抽取出来组成一个新的数组;

    • 数组使用valueForKeyPath方法,在key中添加@符号 + 要执行的计算操作;可以实现指定的计算功能: 技术分享

  • 字典使用KVC:

    • 字典使用setValuesForKeysWithDictonary:方法,将字典中key对应的value值设置到对象的对应属性;不过切记字典中的key在对象中一定要有与之对应的属性(即:对象中的属性只能多于字典中的key),如果字典中的key在对象中找不到与之对应的属性,程序崩溃。 技术分享

    • 对象使用dictionaryWithValuesForKeys:方法,通过传入对象的属性数组,返回字典;字典中将对象的属性以键值对的形式存放。 技术分享

2、使用KVC注意事项:

  • 使用KVC不包含路径方式,给对象属性赋值、或者根据key从对象中取值时,key中一定不能包含路径;因为,不带Path的KVC方法默认将传入的字符串当成一个完整的key,并不能识别其中的路径(即:key中的.符号);如果传入路径程序崩溃。 技术分享

  • 数组使用KVC不包含路径方式,只能执行计算数组长度的功能;不能执行其他操作,否则,程序将会崩溃。

    • 执行计算数组的长度功能: 技术分享

    • 执行计算长度功能并在key中添加属性名时,程序崩溃: 技术分享

    • 执行求和功能,程序崩溃: 技术分享

  • 数组使用KVC的forKeyPath方法计算长度时,传入对象的属性名无效;返回整个数组的长度: 技术分享

总结:

  • KVC使用forKey类型方法时,key中不能传入路径;因为,forKey类型方法只会将传入的字符串当成整个key;在对象中查找属性时没有找到与key同名的属性时程序报错。

  • 数组使用forKey类型的方法时,只能执行计算长度的功能;即:array.count,不过,在key中必须使用@符号,表明这是在执行计算操作。

  • KVC使用forKeyPath类型方法时,运行时系统能够根据key中的路径找到与之对应的对象的属性;进行赋值、取值操作。

  • KVC使用forKeyPath类型方法时,能够在将要执行的计算操作结合@符号添加到key中;执行计算功能。

  • 字典使用KVC时,能够根据字典中的键对应的值设置到对象对应的属性中;也能根据对象属性数组,将对象的属性打包到字典中使用。

 

以上是关于iOS核心笔记—KVC机制的主要内容,如果未能解决你的问题,请参考以下文章

[OC学习笔记]KVC原理

IOS开发过程中的KVC机制

iOS底层学习——KVC

iOS KVC

iOS开发-OC篇-KVC详解

iOS设计模式 —— KVC