KVO

什么是KVO?

key - value -observing
是一种观察者设计模式
系统采用 isa (isa-swizzling)混写来实现KVO

KVO实现流程是什么?

屏幕快照 2018-11-14 下午5.19.44.png

系统 NSKVONotifying_A 的setter实现

屏幕快照 2018-11-14 下午5.25.46.png

通过 KVC 设置新value的时候会触发 KVO
是因为KVC调用了类的setter方法
直接改变成员变量的值却不会触发,需要手动添加 willChangeValueForKey 触发KVO

    //直接为成员变量赋值
   [self willChangeValueForKey:@"value"];
    _value += 1;
   [self didChangeValueForKey:@"value"];

总结:

使用setter方法改变值 KVO会生效
使用 setvalue forkey 改变值 KVO会生效
成员变量直接修改 需要手动添加KVO才会修改

你可能感兴趣的:(KVO)