KVO

2018-08-29  本文已影响0人  molar

什么是KVO?

KVO是观察者模式,当一个被观察者对象属性发生改变时,观察者会收到通知。

有利于两个类之间的解耦。

KVO的实现原理

KVO基于运行时原理。

当监听对象的属性时,会为被监听对象的类创建一个派生类NSKVONotifying_Class并且重写属性的setter方法,会在setter方法之前和之后通知被监听对象的属性值更改情况。在这个过程中指向原来对象的isa指针会指向新创建的子类。

每个对象都有isa指针,它指向该对象所属的类。

setter内的实现

willChangeValueForKey:在属性改变之前调用;

didChangeValueForKey:在属性改变之后调用;

observeValueForKey:ofObject:change:context: 最后也会被调用

KVO触发条件

是否执行了setter方法,是否使用了kvc赋值。

KVO使用

1、注册监听者,实施监听

params:

object:被监听对象

observe:监听对象

keyPath:被监听属性

options:

...new:监听方法中获取新值。

...old: 监听方法中获取旧值。

...initail:监听方法中获取初始化值

...prior:属性改变前后的值都会传到监听方法

2、实现监听方法

上一篇下一篇

猜你喜欢

热点阅读