美文网首页程序员
通过面试题来剖析KVO以及KVC

通过面试题来剖析KVO以及KVC

作者: 彭小先生 | 来源:发表于2018-06-06 16:47 被阅读0次

iOS用什么方式实现对一个对象的KVO?(KVO的本质?)

KVO概念 未使用KVO监听的对象 使用了KVO监听的对象

NSKVONotifying_MJPerson是使用Runtime动态创建的一个类,是MJPerson的子类

_NSSetValueAndNotify内部实现

小技巧:lldb调试的时候根据方法地址可以打印方法的实现信息p (IMP) 0xxxxx

答案:
1、利用Runtime API动态生成一个子类,并且让instance对象的isa指向这个全新的子类
2、当修改instance对象的属性时,会调用Foundation的_NSSetValueAndNotify函数

  • willChangeValueForKey:
  • 父类原来的setter
  • didChangeValueForKey:
    内部会触发监听器(Oberserve)的监听方法(observerValueForKeyPath:ofObject:change:context:)

如何手动触发KVO?

属性值没有改变时,自己触发KVO

答案:在需要触发的地方重写方法

手动调用:willChangeValueForKey:和didChangeValueForKey:

直接修改成员变量会触发KVO吗?

答案:不会。
属性能不能监听取决于是否有set方法

通过KVC修改属性会触发KVO吗?

答案:会触发KVO。(没有set方法也是可以的)

KVC的赋值和取值的过程?原理是什么?

答案:


setValue:ForKey的原理
valueForKey的原理

相关文章

网友评论

    本文标题:通过面试题来剖析KVO以及KVC

    本文链接:https://www.haomeiwen.com/subject/dwlmsftx.html