KVO的原理-小结

作者: 百舸争流111 | 来源:发表于2016-08-06 14:07 被阅读420次

下面的原理仔细品尝喔~多读几遍就可以理解了,当然理解不了就按我说的来点 KVO 的代码,最后都能理解

1.当一个 object(对象) 有观察者时候,动态创建这个 object(对象) 的类的子类

2.对于每个被观察的 property(属性),重写其 setter 方法

3.在重写的 setter 方法中调用 -willChangeValueForKey: 和 -didChangeValueForKey: 通知观察者

4.当一个 property(属性) 没有观察者时,删除重写的方法

5.当没有 observer(观察者) 观察任何一个 property(属性) 时,删除动态创建的子类

例如:创建Person类,创建一个age属性,并监听这个属性的值得变化

self.person = [Person new];
    
    self.person.age = 18;
    
    NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);
    
    [self.person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
    
    NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);
    self.person.age = 20;

//控制台打印的结果:

2016-08-06 12:59:57.406 KVO原理[1100:84614] isa:Person
2016-08-06 12:59:57.407 KVO原理[1100:84614] isa:NSKVONotifying_Person

因为:isa是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,根据这个指针很容易就会查到他所指的类,
所以NSKVONotifying_Person是Person类的子类,
因此:KVO机制动态创建一个对象person当前类的子类,并为这个新的子类重写了被观察属性keyPath的setter 方法。setter 方法随后负责通知观察对象属性的改变状况---Objective-C 强大的 Runtime---->动态的创建一个类

相关文章

  • KVO的原理-小结

    下面的原理仔细品尝喔~多读几遍就可以理解了,当然理解不了就按我说的来点 KVO 的代码,最后都能理解 1.当一个 ...

  • iOS KVO

    KVO 示例 KVO的实现原理

  • KVO的原理

    KVO基本原理: KVO深入原理: 适用于:

  • 知识集锦

    https://github.com/starainDou 欢迎点星 KVO实现原理 KVO基本原理: 1 kvo...

  • iOS原理篇(一): KVO实现原理

    KVO实现原理 什么是 KVO KVO 基本使用 KVO 的本质 总结 一 、 什么是KVO KVO(Key-Va...

  • iOS高级进阶之KVO

    KVO的原理 分析原理 使用 手动调用 自己实现KVO NSObject+KVOBlock.h NSObject+...

  • iOS-自定义KVO

    KVO原理及使用 我们之前讨论过KVO的原理,知道KVO机制是生成了一个中间类NSKVONotifying,该中间...

  • 20.iOS底层学习之KVO 原理

    本篇提纲1、KVO简介;2、KVO的使用;3、KVO的一些细节;4、KVO的底层原理; KVO简介 KVO全称Ke...

  • 常见面试题--KVC和KVO

    1、KVO实现原理 2、KVC原理

  • 04. KVO使用,原理,本质

    问题 KVO日常使用 KVO原理(KVO本质是什么) 如何手动触发KVO 直接修改成员变量会触发KVO吗 KVO图...

网友评论

    本文标题:KVO的原理-小结

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