美文网首页
iOS中的KVO和KVC

iOS中的KVO和KVC

作者: it小小菜鸟 | 来源:发表于2020-07-13 18:19 被阅读0次

一、KVO

KVO的全称是 Key-Value Observing 俗称 “键值监听”,可以用于监听某个对象属性值的改变

KVO本质:

利用RunTime API动态生成一个子类,并且让instance对象的isa指针指向这个全新的子类class对象;
当修改instance对象的属性时,会调用Foundation中的 _NSSetXXXValueAndNotify函数:

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

如何手动触发KVO:

手动调用 willChangeValueForKey: 和 didChangeValueForKey: 方法

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

不会,因为不会调用setter方法,就不会调用相关的方法。

二、KVC

KVC的全称是 Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性

  • 常见API有:

    - (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
    - (void)setValue:(id)value forKey:(NSString *)key;
    - (void)valueForKeyPath:(NSString *)keyPath;
    - (void)valueForKey:(NSString *)key;

  • key和keyPath的区别:

key就只支持当前类的属性,如:forKey:@"xxx"
keyPath支持路径查找,如:forKeyPath:@"xxx.xxx.xxx"

  • setValue:ForKey: 设置值的流程:如下图
    截屏2020-07-13 下午5.53.09.png
    +accessInstanceVariablesDirectly默认返回YES
  • valueForKey: 取值的流程:如下图
    截屏2020-07-13 下午6.17.40.png

通过KVC设置属性能触发KVO吗?

会触发KVO:

  1. 如果有setter方法的话,会直接调用setter方法,从而触发KVO
  2. 如果没有setter方法,KVC内部也会调用willChangeValueForKey:和didChangeValueForKey:从而触发KVO方法

相关文章

  • 无标题文章

    ios中的 kvc和kvo的区别 KVC编程时setValue(value: AnyObje...

  • KVC 和 KVO

    iOS-KVC和KVO精炼讲解(干货)KVC 和 KVOiOS开发系列--Objective-C之KVC、KVO细...

  • 说一下KVC和KVO

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

  • 从网上收集的一些关键知识点总结

    iOS 中KVC、KVO、NSNotification、delegate 总结及区别

  • 4.iOS开发之KVC

    iOS的日常开发中KVC与KVO还是使用率蛮高的,整理一下。KVC和KVO都是基于OC的动态特性和Runtime机...

  • 5.iOS开发之KVO

    iOS的日常开发中KVC与KVO还是使用率蛮高的,整理一下。KVC和KVO都是基于OC的动态特性和Runtime机...

  • KVC,KVO,消息,代理

    iOS 中KVC、KVO、NSNotification、delegate 总结及区别 1、KVC,即是指 NSKe...

  • 什么是KVC

    在iOS开发过程中,我们经常会听到或者用到KVO/KVC,但是对于什么是KVO和KVC,我们可能没有那么了解。下面...

  • KVO/KVC系列

    在iOS开发过程中,我们经常会听到或者用到KVO/KVC,但是对于什么是KVO和KVC,我们可能没有那么了解。下面...

  • 知识点3

    26. 什么是KVC和KVO? KVO: iOS开发-KVO的奥秘 http://www.jianshu.com/...

网友评论

      本文标题:iOS中的KVO和KVC

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