当前位置: 首页 > 面试题库 >

KVC /KVO的底层原理和使用场景

梁丘璞瑜
2023-03-14
本文向大家介绍KVC /KVO的底层原理和使用场景相关面试题,主要包含被问及KVC /KVO的底层原理和使用场景时的应答技巧和注意事项,需要的朋友参考一下
KVC(key value coding)
(一)原理

(1)赋值时首先判断有没有对应的set方法,如果有直接赋值
(2)如果没有set方法,查看有没有和key一样的成员变量,如果有,直接赋值
(3)如果没有成员变量,查找有没有对应的属性,如果有,直接赋值
(4)如果都没有,调用setvalue forUndefinedKey方法
(二)使用场景
(1)赋值

- (void)setValue:(nullable id)value forKey:(NSString *)key;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
- (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key;
- (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *, id> *)keyedValues;

(2)取值

- (id)valueForKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;

(3)字典转模型

- (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *, id> 

(4)模型转字典

- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
KVO

(一)实现原理
(1)对象添加observer后,runtime会自动生成一个中间类,让对象的isa指针指向这个中间类(继承自原类),
(2)中间类会重写set方法,并在调用元set方法的前后添加willChangeValue和didChangeValue方法,继而通知observer
如果需要手动触发kvo,只需调用willChangeValue和didChangeValue方法即可




 类似资料:
  • 本文向大家介绍什么是KVC和KVO?相关面试题,主要包含被问及什么是KVC和KVO?时的应答技巧和注意事项,需要的朋友参考一下 KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现。KVO(Key-Va

  • 本文向大家介绍KVO and KVC 区别?相关面试题,主要包含被问及KVO and KVC 区别?时的应答技巧和注意事项,需要的朋友参考一下 答案: kvc: 键值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。很多情况下可以简化程序代码。apple文档其实给了一个很好的例子。 kvo: 键值观察机制,他提供了观察某一属性变化的方法,极大的

  • 主要内容:一、写在前面,二、ReentrantLock和AQS的关系,三、ReentrantLock加锁和释放锁的底层原理,四、总结一、写在前面 上一篇文章聊了一下java并发中常用的原子类的原理和Java 8的优化,具体请参见文章:《为什么程序员招聘都要5年经验起?因为他们懂Java8底层优化!》。 这篇文章,我们来聊聊面试的时候比较有杀伤力的一个问题:聊聊你对AQS的理解? 之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题。当时那位同学内心估计受到了一万点伤害。。。 因为首

  • 主要内容:一、synchronized的使用方式,二、synchronized锁的原理,三、synchronized锁的优化,四、Lock锁与synchronized一、synchronized的使用方式 在语法上,要使用synchronized关键字,需要把任意一个非null对象作为"锁"对象,也就是需要一个对象监视器(Object Monitor)。总的来说有三种用法: 1.1 作用在实例方法 修饰实例方法,相当于对当前实例对象this加锁,this作为对象监视器。 1.2 作用在静态方法

  • 主要内容:一、synchronized的使用方式,二、synchronized锁的原理,三、synchronized锁的优化,四、Lock锁与synchronized一、synchronized的使用方式 在语法上,要使用synchronized关键字,需要把任意一个非null对象作为"锁"对象,也就是需要一个对象监视器(Object Monitor)。总的来说有三种用法: 1.1 作用在实例方法 修饰实例方法,相当于对当前实例对象this加锁,this作为对象监视器。 1.2 作用在静态方法

  • 无论是从之前的章节直接跳到本章,还是读完了其余章节一直到这——你都将在本章见识到 Git 的内部工作原理和实现方式。 我们发现学习这部分内容对于理解 Git 的用途和强大至关重要。不过也有人认为这些内容对于初学者而言可能难以理解且过于复杂。 因此我们把这部分内容放在最后一章,在学习过程中可以先阅读这部分,也可以晚点阅读这部分,这取决于你自己。 无论如何,既然已经读到了这里,就让我们开始吧。 首先要