KVO

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上半年有段时间做了一个项目,项目中聊天界面用到了音频播放,涉及到进度条,当时做android时候处理的不太好,由于...
    DaZenD阅读 8,117评论 0 26
  • KVO概述 键值观察Key-Value-Observer就是观察者模式。 观察者模式的定义:一个目标对象管理所有依...
    小希嘻阅读 3,772评论 0 0
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,904评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,842评论 1 32
  • KVO原理浅析 KVO,即Key-Value Observing,官方文档中的介绍是 Key-value obse...
    wilsonhan阅读 5,722评论 1 7