美文网首页
KVO Options 详细介绍

KVO Options 详细介绍

作者: iOS_愛OS | 来源:发表于2019-03-14 15:45 被阅读0次

KVO Options 详细介绍


Options 影响 方法 observeValueForKeyPath:ofObject:change:context: 中的 change 字典, 选择不同的 Options , 字典 change的内容会随着改变


  • NSKeyValueObservingOptionOld : change 中会包含 key 变化之前的值 old
  • NSKeyValueObservingOptionNew : change 中包含 key 变化之后的值 new
  • NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew: change 中即包含 key 的旧值,也包含新值
  • NSKeyValueObservingOptionInitial : change 中不包含 key 的值,会在 kvo 注册的时候立即发送通知。
  • NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew : 注册kvo时立即发送通知 change 中有 new 值,这里的 new 值是注册之前 key 的值。
  • NSKeyValueObservingOptionPrior : 会在值发生改变前发出一次通知,当然改变后的通知依旧还会发出,也就是每次change都会有两个通知。值变化之前发送通知的 change 中包含一个键值对 NSKeyValueChangeNotificationIsPriorKey:@(1), 值发生变化之后的的通知 change 不包含上面提到的 键值对,可以跟 willChange 手动通知搭配使用

除了存在 NSKeyValueObservingOptionInitial 会在注册 KVO 时发送通知,其他选项都是在 key 发生变化时才发送通知。


下面验证一下上面的结论

注册 KVO

KVO_Employees *employees = [[KVO_Employees alloc] init];
employees.salary = @(111);
[employees addObserver:self forKeyPath:@"salary" options:options context:nil];
employees.salary = @(10);
[employees removeObserver:self forKeyPath:@"salary"];

KVO通知响应

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    NSLog(@"change: %@",change);
}

Log 打印如下

-  `NSKeyValueObservingOptionInitial`

     change: {
                kind = 1;
            }

     change: {
                kind = 1;
            }

- `NSKeyValueObservingOptionNew`
    注册时 不发通知 
     change: {
                kind = 1;
                new = 10;
            }

- `NSKeyValueObservingOptionOld`
    注册时 不发通知 
     change: {
                kind = 1;
                old = 111;
            }
- `NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld`
    注册时不发通知
     change: {
                kind = 1;
                new = 10;
                old = 111;
            }
    

- `NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew`
    change: {
                kind = 1;
                new = 111;
            }, 

    change: {
                kind = 1;
                new = 10;
            },


- `NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld`
    change: {
                kind = 1;
                new = 111;
            }

    change: {
                kind = 1;
                new = 10;
                old = 111;
            }
- `NSKeyValueObservingOptionPrior`
    change: {
                kind = 1;
                notificationIsPrior = 1;
            }
    change: {
                kind = 1;
            }               

相关文章

  • KVO Options 详细介绍

    KVO Options 详细介绍 Options 影响 方法 observeValueForKeyPath:ofO...

  • KVC-KVO

    https://github.com/leejayID/KVC-KVO 此文章详细介绍了KVC和KVO的使用,适合...

  • KVO

    KVO 添加 addObserver:forKeyPath: options:context: observer ...

  • KVO内部实现原理

    KVO接口说明 注册:addObserver:forKeyPath:options:context: 例如 [se...

  • 2018-02-14

    探究KVO的底层实现原理 addObserver:forKeyPath:options:context:各个参数的...

  • RxSwift学习(7)KVO知识补充

    网上好多关于OC的KVO介绍。在这里就不详细赘述了。参考KVO原理分析及使用进阶.在RxSwift中使用todoN...

  • KVO的基本原理

    KVO的基本使用 1.通过addObserver:forKeyPath:options:context:方法注册观...

  • NSKeyValueObservingOptions详解

    options是KVO中常见的参数,然而通常只是将它固定为“NSKeyValueObservingOptionNe...

  • KVC、KVO

    KVC、KVO探识(一)KVO和KVO的详细使用 KVC、KVO探识(二)KVC你不知道的东西 KVC、KVO探识...

  • KVC, KVO实现原理剖析

    iPhone程序开发 KVO/KVC实现机理分析是本文要介绍的内容,不多说,直接进入话题。我们来看详细内容。 Ob...

网友评论

      本文标题:KVO Options 详细介绍

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