OC的KVO学习记录(1)

作者: 三生之二 | 来源:发表于2018-08-27 22:00 被阅读10次

KVO :键值观察。当我们需要对某个对象的某个属性进行监听的时候,我们就利用KVO机制,通过属性关键字绑定,进行监听。

原理 :当某个对象A的某个属性被监听,系统会自动生成一个A的子类NSKVONotifing_A类,并重写setter方法,将被监听的A的实例对象的isa指针指向NSKVONotifing_A类。
想了解isa指针的可以看这里

为何要将isa指针指向子类?
如果不这样做,那么我们的isa依然是A类,那么在执行setter的时候,依然是A类的setter,并不是重写后的子类NSKVONotifing_A的setter方法,这样就不会执行通知更改触发。当isa改成NSKVONotifing_A后,就会先在NSKVONotifing_A的methodLists里寻找setter方法,而不是在A的methodLists中寻找(除非找不到setter才回去父类A中寻找)。

重写后的setter方法中会对属性值更改进行通知,分别以willChangeValueForKey:和didChangeValueForKey:进行触发。被观察属性发生改变之前,willChangeValueForKey:被调用,通知系统该 keyPath 的属性值即将变更,来保存旧值;当改变发生后,didChangeValueForKey:被调用,通知系统该 keyPath 的属性值已经变更;之后,observeValueForKey:ofObject:change:context:就会被调用。

手动触发KVO
1、取消自动触发:重写+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key
2、重写属性的setter方法,根据需求判断是否需要调用willChangeValueForKey:和didChangeValueForKey:方法。

NSMutableArray和NSMutableSet调用KVO

    [[self.observedObject mutableArrayValueForKey:NSStringFromSelector(@selector(myArray))] addObject:object];
    [[self.observedObject mutableSetValueForKey:NSStringFromSelector(@selector(mySet))] addObject:object];

相关文章

  • OC的KVO学习记录(1)

    KVO :键值观察。当我们需要对某个对象的某个属性进行监听的时候,我们就利用KVO机制,通过属性关键字绑定,进行监...

  • OC的KVO学习记录(2)

    仿写KVO的实现KVO原理参考可前一篇OC的KVO学习记录代码github地址:Sameny仿写KVO 注:关键代...

  • iOS 10.17日记

    swift 学习 1 static和class的区别 2 学习手势的使用 3 swift 中kvo的使用(和oc...

  • 整理面试题

    一、OC语言基础知识剖析 (1)UI卡顿掉帧的原因 (1)什么是KVO? KVO实现原理?如何手动添加KVO? <...

  • iOS知识点小结

    1.KVO1.1> KVO 简介:KVO 是 OC 观察者设计模式的一种实现.KVO 指定一个被观察的对象的属性,...

  • Runtime面试题

    1.oc消息转发流程 2.KVO原理KVO是基于runtime实现的,KVO运用了isa-swizzling将两个...

  • iOS KVO 补充版

    1. 什么是KVO? KVO全称key-value observing; KVO是OC中观察者设计模式的又一个实现...

  • iOS KVO

    1. 什么是KVO? KVO全称key-value observeing; KVO是OC中观察者设计模式的又一个实...

  • KVO和KVC的理解

    KVO键值监听的使用 KVO是OC观察者模式的又一实现,使用了isa混写来实现的KVO KVO原理 1.运行时会创...

  • OC 基础-KVO(1)

    KVO:全称:key-value-observing,俗称“键值监听”,可以用于监听某个对象属性值的变化内部实现(...

网友评论

    本文标题:OC的KVO学习记录(1)

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