美文网首页
iOS KVC 实现原理

iOS KVC 实现原理

作者: 孙掌门 | 来源:发表于2020-02-03 15:55 被阅读0次

iOS KVC 实现原理

很多面试的时候都会问,KVC 会 触发 KVO 吗?,答案是会的,这个问题太容易验证了,写个 DEMO 调用下 KVC 然后 KVO 监听下就知道了,但是为什么会触发的?

当我们 使用 setValueForKey 或者 keyPath 的时候,系统会首先查找是否有 setKey,的方法,当有这个方法的时候,就会去调用这个set方法,如果调用了 set 方法,自然而然就会触发我们的 KVO。

然后去查找是否有 _setKey 方法,找到就会调用这两个方法。

如果上面两个set 方法都没有查找到,就会去调用 +(BOOL)accessInstanceVariablesDirectly 这个方法,如果返回 YES ,就代表可以直接反问成员变量,如果返回 NO ,则不允许访问,如果返回 NO ,再调用 KVC 的时候,就会跑出异常崩溃,跑出setvalueforundefinedkey那个错误。

如果上面的方法返回 YES ,就表示允许访问成员变量,比如,我们通过 kvc 设置 age 属性,[self setValue:@10 forKey:@"age"]; 那么系统会去依次查找这四个成员变量,然后赋值 int _age; int _isAge; int age int isAge,如果发现有其中一个成员变量就会立刻赋值。

总结:先查找 set 方法,然后询问是否允许访问成员变量,如果允许,给成员变量赋值,就算没有set方法,kvc 内部也是会触发kvo的

相关文章

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

  • 说一下KVC和KVO

    本篇采用简单的例子,来介绍 iOS 中的 KVC 和 KVO 的用法和实现原理。 一、KVC 1. KVC是什么 ...

  • KVC底层实现步骤

    参考 iOS底层-KVC使用实践以及实现原理 [a setValue:value forKeyPath:@"ico...

  • iOS-KVC(一)基本使用

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(二)内部赋值深层次原理

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(五)容器类

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(四)常见异常处理

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(六)正确性验证

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(三)内部取值深层次原理

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

  • iOS-KVC(八)常见使用

    iOS-KVC(一)基本使用iOS-KVC(二)内部赋值深层次原理iOS-KVC(三)内部取值深层次原理iOS-K...

网友评论

      本文标题:iOS KVC 实现原理

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