美文网首页
iOS NSMutableArray KVO

iOS NSMutableArray KVO

作者: 落叶随风_90e5 | 来源:发表于2020-05-18 18:35 被阅读0次

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

    例如我们一般要监听name属性的变化 监听name属性.png 这样是没有任何问题的,但是当我们项目中对tableView的dataSource的变化要实现实时更新的时候,我们就要监听tableView.dataSource,按照此思路那我们下面就来实现一下吧 监听dataSource变化.png 这是什么原因呢?这是因为NSMutableArray是一个可变的容器,当 [self.dataSource addObject:@"3"]执行时,我们改变只是dataSource里面的item,并没有改变dataSource,因为KVO的本质是系统监测到某个属性的内存地址或常量改变时 dataSource是否发生改变.png

    我们最终的目的并不是为了监听dataSource变化,而是dataSource里面的内容。
    那么,该如何实现对 NSMutableArray 的 KVO 呢?官方为我们提供了这个方法- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key
    像之前一样,为可变数组添加 KVO。在加减元素时,使用这个方法来获取我们要进行操作的可变数组,便可以像普通的属性一样,收到它变化的消息。

    正确监听dataSource变化.png

    那么为什么mutableArrayValueForKey:这个方法可以监听dataSource内部变化呢?mutableArrayValueForKey:默认采用的是搜索模式,在NSMutableArray搜索匹配insertObject:atIndex:和removeObjectAtIndex:等能引起容器内部Object发生改变的方法,如果发现至少一个插入或者删除方法,就会发送发送消息给原始接受者。

    相关文章

      网友评论

          本文标题:iOS NSMutableArray KVO

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