iOS KVO底层实现原理

2020-03-04  本文已影响0人  出来遛狗了

很多人只知道怎么使用KVO,但是并不知道其中的实现原理,只知道是用runtime实现。但是面试的时候这种回答不是面试官想要的。所以写下这篇文章,希望迷惑的同学能深入了解KVO的底层实现原理。(ps: 属于个人总结,如果有不对的地方,请在评论里指出,谢谢)
首先我们为了实现KVO,我们新建一个Person类,包含了name属性。


image.png

我们在viewController中来监听name的改变


image.png

其实监听name的变化就是监听了setName方法。
接下来,我们就讲解一下,是怎么监听的setName的方法。
当我们给person添加observer时,其实系统帮我们创建了一个Person的子类NSKVONotifying_Person
通过将person对象的isa指向NSKVONotifying_Person


image.png

然后在NSKVONotifying_Person里面重写setName方法。
我们可以用伪代码的方式来解析重写的setName
在NSKVONotifying_Person中

- (void)setName:(NSString *)name{
    [observe willChangeValueForKey:@"name"];
    [super setName:name];
    [observe didChangeValueForKey:@"name"];
    [observe observeValueForKeyPath:key ofObject:self change:nil context:nil];
}

这样就能监听到name的变化了
以上就是我对KVO的解析了。

上一篇 下一篇

猜你喜欢

热点阅读