美文网首页
iOS KVO原理

iOS KVO原理

作者: zhongli_007 | 来源:发表于2019-07-09 09:43 被阅读0次

    1. 在添加监听后   [publishObj addObserver:receiveObj   forKeyPath:@"userName" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];

    利用RuntimeAPI会动态生成一个子类假设原来的类名是 Person,那么新生成的子类是 NSKVONotifying_Person。并且让这个instance对象的isa指向这个子类。

    我们遍历这个子类的属性以及方法可以看到如下结果:

    可以看到新的子类没有新添加的属性,只有方法。最明显的一个方法是重写了setUserName: 这个方法。那我们就有理由怀疑发布实际上是在这个方法里实现的。通过手动调用KVO,我们得出结论确实如此。实际上是通过:

        [self willChangeValueForKey:@"userName"];

        [self didChangeValueForKey:@"userName"];

    来实现的。

    综上所述:KVO在调用的时候,实际上生成了NSKVONotifying_Person的新类,实例的isa指针指向这个新类。该类的父类实际上还是Person,新类重写了四个方法,监听是通过setter方法来实现的,这点可以通过手动调用KVO来证实,最后回调结果。

    相关文章

      网友评论

          本文标题:iOS KVO原理

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