iOS消息机制—KVO

概述

KVO全称KeyValueObserving,是苹果提供的一套事件通知机制。允许对象监听另一个对象特定属性的改变,并在改变时接收到事件。由于KVO的实现机制,所以对属性才会发生作用,一般继承自NSObject的对象都默认支持KVO。

KVO和NSNotificationCenter都是iOS中观察者模式的一种实现。区别在于,相对于被观察者和观察者之间的关系,KVO是一对一的,而不一对多的。KVO对被监听对象无侵入性,不需要修改其内部代码即可实现监听。

简单使用

注册观察者

使用方法: addObserver:forKeyPath:options:context
参数含义:
1. observer:观察者,监听属性变化的对象。该对象必须实现 observeValueForKeyPath:ofObject:change:context: 方法。
2. keyPath:要观察的属性名称。要和属性声明的名称一致。
3. options:对KVO机制进行配置,修改KVO通知的时机以及通知的内容
4. context: 传入任意类型的对象,在"接收消息回调"的代码中可以接收到这个对象,是KVO中的一种传值方式。

在这里插入图片描述
默认只接受新值

NSKeyValueObservingOptionNew:接收方法中使用change参数传入变化后的新值,键为:NSKeyValueChangeNewKey;
NSKeyValueObservingOptionOld:接收方法中使用change参数传入变化前的旧值,键为:NSKeyValueChangeOldKey;
NSKeyValueObservingOptionInitial:注册之后立刻调用接收方法,如果配置了NSKeyValueObservingOptionNew,change参数内容会包含新值,键为:NSKeyValueChangeNewKey;
NSKeyValueObservingOptionPrior:如果加入这个参数,接收方法会在变化前后分别调用一次,共两次,变化前的通知change参数包含notificationIsPrior = 1。

在观察者实现对应的方法

注册后,当属性的值发生变化时,框架默认会自动通知注册的观察者
在这里插入图片描述

不需要监听的时候进行移除

在这里插入图片描述

一些注意事项

  1. addObserver之后,在不需要监听的时候,要及时remove,否则被监听对象释放后,再触发监听器会引起崩溃
  2. addObserver方法与removeObserver方法要一一对应。不要重复添加监听,也不要试图删除没有添加过的监听。重复添国监听,在被监听对象属性改变时,会多次调用监听方法。试图删除没有添加过的监听器会引起崩溃

demo案例

发布了34 篇原创文章 · 获赞 4 · 访问量 745

猜你喜欢

转载自blog.csdn.net/weixin_44824650/article/details/101112149