美文网首页
如何实现对数组NSMutableArray的KVO

如何实现对数组NSMutableArray的KVO

作者: zhengxiaolang | 来源:发表于2021-01-08 17:20 被阅读0次

KVO原理

原理很简单,就是重写了被观察属性的 set 方法
如果直接访问变量,是无法触发的。

那针对数组的话,通常我们只是调用addObject,或者removeObject,
但以上方法并不会触发set方法,也就不会触发KVO的。

那么,该如何实现对 NSMutableArray 的 KVO 呢?
官方为我们提供了这个方法

解决方案:

- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key

举个例子:

@property (nonatomic, strong) NSMutableArray *lines;

对需要观察的属性进行注册

[self addObserver:self 
forKeyPath:@"lines" 
options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld 
context:nil];

触发方法,增删操作,使用addObject,或者removeObject并不会触发KVO

 [[self mutableArrayValueForKey:@"lines"] addObject:@"1"],

观察回调方法

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary<NSString *,id> *)change
                       context:(void *)context
{
    if([keyPath isEqualToString:@"lines"]){
        NSMutableArray * lines = [self mutableArrayValueForKey:@"lines"];
        if (lines.count) {
            //do sth
        }else{
           //do sth
        }
    }
}

相关文章

  • 如何实现对数组NSMutableArray的KVO

    KVO原理 原理很简单,就是重写了被观察属性的 set 方法如果直接访问变量,是无法触发的。 那针对数组的话,通常...

  • 如何对NSMutableArray进行KVO

    我们知道,iOS 中 KVO (key-value-observing) 的原理,简单来说就是重写了被观察属性的 ...

  • 对NSMutableArray进行KVO

    对NSMutableArray进行KVO KVO的原理简单来说就是重写了被观察者属性的set方法,一般情况下调用s...

  • 通知 /KVO、KVC相关

    如何实现通知机制? KVO ·kvo是OC对观察者设计模式的又一实现 ·APPLE使用了isa混写实现kvo KV...

  • 如何使用KVO对NSMutableArray进行监听

    通过上面的方法获取到mutableArray并进行操作则可以对数组进行监听

  • IOS基础知识-KVO原理篇

    问题 iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)如何手动触发KVO KVO的全称 Key-V...

  • iOS底层原理汇 - 探索KVO本质

    问题 iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?) 如何手动触发KVO ? 首先需要了解KVO...

  • KVO和KVC的本质

    一、KVO 问题 iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?) 如何手动触发KVO? 1. K...

  • KVO的本质

    面试问题: iOS用什么方式实现对一个对象的KVO? 如何手动触发KVO? KVO简介 KVO就是键值观测。有时候...

  • KVO

    iOS用什么方式实现对一个对象的KVO 如何手动触发KVO 直接修改成员变量会触发KVO么? KVO [self....

网友评论

      本文标题:如何实现对数组NSMutableArray的KVO

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