Objective-C的本质(4)—— KVO本质

2020-04-26  本文已影响0人  yangfei02821

参考:
iOS底层原理总结 - 探寻KVO本质
iOS-KVO本质

问题一:kvo如果找到对应的属性

问题二:kvo如何创建出NSKVONotifying_这个类

NSKVONotifying_Person是使用Runtime动态创建的一个新类,是原先类Person的一个子类,新类的superclass指向Person。
新类重写了四个方法:

思考的问题:

1.当属性设置为只读,
2.给成员变量添加监听
上述两种形式下都没有setter方法的声明和实现,如何调用c语言的_NSSetXXXValueAndNotify函数
通过kvc赋值,都可以触发监听
问题:kvc内部实现是什么样的。

kvc内部的确是有 __NSSetValueAndNotifyForKeyInIvar之类的调用,位于-[NSKeyValueIvarSetter initWithContainerClassIDcontainerIsa:ivar:],此外还有__NSKVONotifyingMutatorsShouldNotifyForIsaAndKey之类的函数,内部会获取_isKVOA的实现。

 // 通过KVC修改age属性
    [person setValue:@10 forKey:@"age"];
    // [person willChangeValueForKey:@"age"];
    // person->_age = 10;
    // [person didChangeValueForKey:@"age"];
上一篇下一篇

猜你喜欢

热点阅读