NSMutableArray
类型属性的监听实现方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
mutableArrayValueForKey
访问数组这样,每次向数组添加一个元素都会出发一次 KVO 的执行
但是,如果一次向数组中添加 N 个元素,也会出发 N 次 KVO 的执行,有时,这并不是我们想要的
一次向数组添加 N 个元素,但要使 KVO 执行一次,需要使用另外一个 API
- (void)insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes
实现接口
添加
insertObject:in<Key>AtIndex:
// 或
insert<Key>:atIndexes:
删除
removeObjectFrom<Key>AtIndex:
// 或
remove<Key>AtIndexes:
替换,可选,可以在性能检测出现问题时实现
replaceObjectIn<Key>AtIndex:withObject:
// 或
replace<Key>AtIndexes:with<Key>:
以上两种方法监听 NSMutableArray
的方式非常类似,特别是在监听处的操作,几乎是一样:
addObserver:forKeyPath:options:context:
方法注册监听observeValueForKeyPath:ofObject:change:context:
定义监听操作主要的不同在于 NSMutableArray
代理类的实现
由于 Swift 没有 KVO 接口规范的实现,因此,在 Swift 中监听数组内元素的变化,只有使用代理对象
同时,需要注意的是,被监听的数组,需要加上 dynamic
修饰符,才能成功监听到