美文网首页2019IV
iOS-KVO实现原理

iOS-KVO实现原理

作者: 见哥哥长高了 | 来源:发表于2018-12-22 11:18 被阅读12次

说到KVO(Key-Value-Observe),相信每个人都知道,具体用法肯定也是滚瓜烂熟。那么KVO的实现原理是怎样的呢?

我们就来举一个例子,来说明一个它的具体实现过程:
一、新建两个类:Person 和 Dog
二、给Dog添加一个属性age
三、初始化Person对象和Dog对象,给person对象添加对Dog对象age的观察
四、Person中实现方法
最后、改变age值,进行验证

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context

其具体实现代码如下:

    self.person = [[Person alloc]init];
    
    self.dog = [[Dog alloc]init];
    
    [self.dog addObserver:self.person forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];

这个时候我们执行

self.dog.age = 19;

就会发现Person类中的以下方法调用

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    
    NSLog(@"检测到了%@发生了变化  %@----%@------%@",keyPath,object,change,context);
}

上面说了这么多,其实只涉及到用法,那么KVO的实现原理到底是怎样的呢?

1、其实当某个类的某个属性被注册监听的时候,系统会隐性的创建一个这个类的子类,以NSKVONotifying_+(当前类名)。
对应到Dog类就是NSKVONotifying_Dog。
2、在NSKVONotifying_Dog类实现中实现方法setAge,调用willChangeValueForKey和didChangeValueForKey方法

#import "NSKVONotifying_Dog.h"

@implementation NSKVONotifying_Dog

-(void)setAge:(int)age{
    [super setAge:age];
    
    [self willChangeValueForKey:@"age"];
    
    [self didChangeValueForKey:@"age"];
}
@end

这两个方法的作用是触发

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context

方法执行。

相关文章

  • iOS-KVO(二) 使用注意点

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(三) 窥探底层实现

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(四) 自定义KVO+Block

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(一) 基本操作

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO 实现原理

    一、概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则其观察...

  • iOS-KVO实现原理

    说到KVO(Key-Value-Observe),相信每个人都知道,具体用法肯定也是滚瓜烂熟。那么KVO的实现原理...

  • iOS-KVO 底层实现原理

    本问讲解的内容主要有以下方面:1.概述2.KVO的基本用法3.KVO的底层实现(主要) 1.概述KVO,即:Key...

  • iOS-自定义KVO

    前言 iOS-KVO原理分析[https://www.jianshu.com/p/f94a972f6187]这篇文...

  • iOS-KVO原理

    1、KVO的基本使用 定义:KVO的全称是Key-Value-Observing,俗称“键值监听”,可以用于监听某...

  • iOS-KVO原理

    初探 Key-value observing is a mechanism that allows objects...

网友评论

    本文标题:iOS-KVO实现原理

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