面试题答案
一键面试KVC基本工作原理
KVC是一种通过键值对来访问对象属性的机制,它提供了一种间接访问对象属性的方法,不依赖于对象的存取方法。KVC基于一种约定俗成的命名规范和查找机制,允许开发者通过字符串形式的键来访问和修改对象的属性值,即使这些属性没有对应的直接访问方法。
使用KVC为对象属性赋值时的查找和设置值流程
- 直接访问:
- 系统首先会检查对象是否有对应的
set<Key>:
方法。如果有,就直接调用这个方法来设置属性值。例如,对于属性name
,系统会查找setName:
方法。
- 系统首先会检查对象是否有对应的
- 间接访问:
- 如果没有找到
set<Key>:
方法,系统会检查对象是否有_<key>
或<key>
形式的实例变量。如果有,会直接访问并设置这个实例变量的值。比如,对于属性name
,会查找_name
或name
实例变量。
- 如果没有找到
- 集合操作方法:
- 如果对象遵循
NSKeyValueCoding
协议且实现了setValue:forUndefinedKey:
方法,系统会调用这个方法来处理赋值操作。 - 如果上述步骤都不满足,系统会抛出
NSUnknownKeyException
异常。
- 如果对象遵循
对于集合属性,KVC提供了特殊的集合操作方法,例如@count
、@sum
等,用于对集合中的元素进行操作。在处理集合属性的赋值时,同样遵循上述基本流程,但也会涉及到集合相关的特定处理逻辑。