美文网首页
IOS 响应式编程思想,KVO的实现原理

IOS 响应式编程思想,KVO的实现原理

作者: 越天高 | 来源:发表于2020-08-10 16:05 被阅读0次

    KVO的实现原理,当我一旦使用KVO,他会帮我实现一个派生类,这个重写了我们的set方法,在执行set方法的时候,他会发送一条消息。

    首先,我们创建一个Person对象,监听他的age的改变
    给NSObject 创建一个分类,增加一个方法

    - (void)sll_addObserver:(id)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context
    {
       /*
           1.runtime动态生成Person的子类(派生类)
           2.重写KVO_Person的属性set方法,目的:监听属性有没有改变
           3.修改对象的isa指针.
           */
          // 修改isa
       object_setClass(self, NSClassFromString(@"NSKVONotifying_Person"));
       // 保存观察者对象
       // self -> P;
       // 动态添加属性
       objc_setAssociatedObject(self, @"observer", observer, OBJC_ASSOCIATION_RETAIN);
    }
    

    派生类的实现

    #import "NSKVONotifying_Person.h"
    #import <objc/message.h>
    
    @implementation NSKVONotifying_Person
    
    - (void)setAge:(int)age
    {
        // super:标志,去执行父类方法
        // 调用观察者的observeValueForKeyPath
        [super setAge:age];
        id observer = objc_getAssociatedObject(self, @"observer");
        [observer observeValueForKeyPath:@"age" ofObject:self change:nil context:nil];
        NSLog(@"执行了NSKVONotifying_Person setAge方法");
    }
    @end
    

    相关文章

      网友评论

          本文标题:IOS 响应式编程思想,KVO的实现原理

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