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时,能够根据字典中的键对应的值设置到对象对应的属性中;也能根据对象属性数组,将对象的属性打包到字典中使用。
时间: 2024-10-14 13:33:30