如何对NSMutableArray进行KVO

我们知道,iOS 中 KVO (key-value-observing) 的原理,简单来说就是重写了被观察属性的 set 方法。自然,一般情况下只有通过调用 set 方法对值进行改变才会触发 KVO,直接访问实例变量修改值是不会触发 KVO 的。

对于 NSMutableArray 内容的变化进行观察,是我们比较常见的一个需求。但是在调用它的 addObject、removeObject 系列方法时,并不会触发它自己的 set 方法。所以,对一个可变数组进行观察,在它加减元素时不会收到期望的消息。

那么,该如何实现对 NSMutableArray 的 KVO 呢?官方为我们提供了这个方法- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key

像之前一样,为可变数组添加 KVO。在加减元素时,使用这个方法来获取我们要进行操作的可变数组,便可以像普通的属性一样,收到它变化的消息。

举个例子,myItems 是我们要进行 KVO 的一个属性,它的定义如下:

@property (nonatomic, strong) NSMutableArray *myItems;

在它进行添加元素时,使用如下方法:

[[self mutableArrayValueForKey:@"myItems"] addObject:item];
这样,我们便实现了对 NSMutableArray 的 KVO。

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

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,903评论 8 265
  • KVC(Key-value coding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iO...
    我的梦工厂阅读 4,355评论 1 8
  • KVC(Key-valuecoding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iOS...
    榕樹頭阅读 4,001评论 0 2
  • KVC简单介绍 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key...
    公子无礼阅读 5,279评论 0 6
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,294评论 4 61