美文网首页iOS知识小总结
KVO-容器类的观察

KVO-容器类的观察

作者: 宇宇宇啊啊啊 | 来源:发表于2021-03-15 23:19 被阅读0次

1.KVO对Array的观察。

我们平时对于对象的属性进行KVO的观察时,都是需要观察变化的对象调用addObserver方法,监听的属性为keyPath。但是:
[self.person addObserver:self forKeyPath:@"array" options:NSKeyValueObservingOptionNew context:nil];
[self.person.array addObject:@"hello"];

这种写法是监听不到的。

因为系统KVO的封装是监听set方法,而键值观察通知依赖于 NSObject 的两个方法willChangeValueForKey:didChangevlueForKey:;在一个被观察属性发生改变之前, willChangeValueForKey: 一定会被调用,这就 会记录旧的值。而当改变发生后,didChangeValueForKey: 会被调用,继而observeValueForKey:ofObject:change:context: 也会被调用。

所以我们需要通过KVO提供的一个方法:
NSMutableArray tempArr = [self.person mutableArrayValueForKey:@"array"];
[tempArr addObject:@"hello"];
通过mutableArrayValueForKey:所取到的数组对象类型是NSKeyValueNotifyingMutableArray
,为NSMutableArray的子类。和对象类观察相似,同样是在子类中动态调用了willChangeValueForKey:didChangevlueForKey:方法。

另外说明一些,observeValueForKey:ofObject:change:context:方法中的change[@"kind"]解释,其实是一个枚举:
typedef NS_ENUM(NSUInteger, NSKeyValueChange) {
NSKeyValueChangeSetting = 1, // 通过setting方法监听
NSKeyValueChangeInsertion = 2, // 通过容器类的插入
NSKeyValueChangeRemoval = 3, // removal
NSKeyValueChangeReplacement = 4, // 重新替换
};

相关文章

  • KVO-容器类的观察

    1.KVO对Array的观察。 我们平时对于对象的属性进行KVO的观察时,都是需要观察变化的对象调用addObse...

  • KVO的实现原理

    KVO的实现原理 KVO-键值观察机制,原理如下: 1.当给A类添加KVO的时候,runtime动态的生成了一个子...

  • KVO 实现容器类观察

    我们一般会使用kvo来观察某一个对象的非容器属性,很少使用kvo来观察一个容器类,今天就和大家聊一下kvo对容器类...

  • KVC\KVO-代理-通知-整理中

    KVC\KVO-代理-通知

  • iOS -KVO

    KVO-键值观察 KVC:对象取值或者设置值。KVO:监听对象值的变化。 响应式编程的一种。KVO的使用非常简单,...

  • 2018-06-21 基础构建模块

    5.1 同步容器类 同步容器类包括Vector和Hashtable 5.1.1 同步容器类的问题 同步容器类都是线...

  • 《Java并发编程实战》学习笔记--并发容器类

    《Java并发编程实战》学习笔记--同步容器类前面介绍了同步容器类,下面来说说并发容器类。 同步容器类:将所有对容...

  • k8s运行容器之Job(四)

    Job 容器按照持续运行的时间可分为两类:服务类容器和工作类容器。 服务类容器通常持续提供服务,需要一直运行,比如...

  • K8S实战(八)| Job 和 CronJob

    前言 容器分为两类 在线业务 - 服务类容器 需要持续不中断的提供服务,容器需要一直运行 离线业务 - 工作类容器...

  • iOS--拷贝

    首先说明两个概念 容器类对象:系统的容器类对象,指NSArray,NSDictionary等 非容器类对象:系统的...

网友评论

    本文标题:KVO-容器类的观察

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