美文网首页ios 学习
iOS KVO(基本使用 触发模式 属性探究 自定义KVO等)

iOS KVO(基本使用 触发模式 属性探究 自定义KVO等)

作者: 羽裳有涯 | 来源:发表于2018-11-19 10:16 被阅读2次
image
KVO全称为Key Value Observing,键值监听机制,
由NSKeyValueObserving协议提供支持,NSObject类继承了该协议,所以NSObject的子类都可使用该方法。

一、基本使用

  • 1、注册观察者(为被观察这指定观察者以及被观察者属性)
/* options: 有4个值,分别是:
 NSKeyValueObservingOptionOld 把更改之前的值提供给处理方法
 NSKeyValueObservingOptionNew 把更改之后的值提供给处理方法
 NSKeyValueObservingOptionInitial 把初始化的值提供给处理方法,一旦注册,立马就会调用一次。通常它会带有新值,而不会带有旧值。
 NSKeyValueObservingOptionPrior 分2次调用。在值改变之前和值改变之后。 
*/ 
//注册一个监听器用于监听指定的key路径 
[self.person addObserver:self 
              forKeyPath:@"name" 
                 options:NSKeyValueObservingOptionNew 
                 context:nil];

  • 2、实现回调方法
//当key路径对应的属性值发生改变时,监听器就会回调自身的监听方法,如下 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)contex 
}
  • 3、触发回调方法
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    static int i = 0;
    person.name = [NSString stringWithFormat:@"%d", i++];
}
*只有触发setter 方法 负责通知观察对象属性才会改变。*
   其实只要触发一下两个方法  就会有回调
   [self willChangeValueForKey:@"person.name"];
    [self didChangeValueForKey:@"person.name"];
  • 4、移除观察者
//删除指定的key路径监听器
[self.person removeObserver:self forKeyPath:@"name"];
//删除指定的key路径监听器,只是多了context参数
[self.person removeObserver:self forKeyPath:@"name" context:nil];

二、自己实现 KVO

查看下一篇文章 iOS KVO 自己实现(利用Runtime)

相关文章

  • KVO原理探究+自定义KVO实现

    概念 基本使用 触发模式 属性依赖 容器类的使用 自定义KVO 概念 KVO全称Key-Value Observi...

  • KVO

    目录 1. KVO的使用1.1 KVO基本使用方法1.2 KVO手动触发模式1.3 KVO属性依赖1.4 KVO容...

  • iOS KVO(基本使用 触发模式 属性探究 自定义KVO等)

    一、基本使用 1、注册观察者(为被观察这指定观察者以及被观察者属性) 2、实现回调方法 3、触发回调方法 4、移除...

  • KVO-KVC的原理探究 - KVO篇

    关于KVO的探究 KVO的基本使用 创建Person类,添加属性age: 在ViewController中添加属性...

  • iOS底层原理总结 - 探寻KVO本质

    问题iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)如何手动触发KVO 首先需要了解KVO基本使用...

  • KVO使用及实现原理

    KVO使用及实现原理 KVO使用 对属性进行监听 对属性的属性进行监听 容器监听 触发(手动触发,kvc赋值) 添...

  • KVO基本使用

    分三部分解释KVO一.KVO基本使用二.KVO原理解析三.自定义实现KVO 一、KVO基本使用 使用KVO,能够非...

  • iOS开发-底层原理 - KVO

    问题:iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)如何手动触发KVO? 一.基本使用 概念:K...

  • kvc、kvo

    KVO 观察者模式,使用了isa 混写来实现kvo。 对成员变量赋值,不会触发KVO, 因为不会触发setter ...

  • iOS-KVO(二) 使用注意点

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

网友评论

    本文标题:iOS KVO(基本使用 触发模式 属性探究 自定义KVO等)

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