KVO

作者: molar | 来源:发表于2018-08-29 15:53 被阅读0次

    什么是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、实现监听方法

    相关文章

      网友评论

          本文标题:KVO

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