美文网首页
响应式编程

响应式编程

作者: 西门丨不吹雪 | 来源:发表于2017-05-03 17:24 被阅读20次

    在网上流传一个非常经典的解释<响应式编程的概念>
    在程序开发中:
    a = b + c
    赋值之后 b 或者 c 的值变化后,a 的值不会跟着变化
    响应式编程,目标就是,如果 b 或者 c 的数值发生变化,a 的数值会同时发生变化

    下面这个例子也是一样,当点击屏幕时,age+1,当age发生改变时就将对应值打印出来
    此处用到的KVO,监听age,一旦改变就处理你需要做的事情

    - (void)viewDidLoad {
       [super viewDidLoad];
        _person = [[Person alloc]init];
    
        //_person添加观察者
       [_person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
    }
    
    // 监听的属性只要一改变就调用
    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
    {
        NSLog(@"%ld",_person.age);
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        _person.age ++;
    }
    

    KVO底层实现:

    • 1.动态创建NSKVONotifying_Person,NSKVONotifying_Person是Person子类,做KVO
    • 2.修改当前对象的isa指针->NSKVONotifying_Person
    • 3.只要调用对象的set,就会调用NSKVONotifying_Person的set方法
    • 4.重写NSKVONotifying_Person的set方法: 1.[super set:] 2.通知观察者,告诉你属性改变
    • 总结就是去判断有没有调用一个对象的set方法

    相关文章

      网友评论

          本文标题:响应式编程

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