美文网首页
响应式编程思想__重写KVO方法

响应式编程思想__重写KVO方法

作者: 走停2015_iOS开发 | 来源:发表于2016-10-04 00:42 被阅读101次

响应式编程思想 KVO本质是监听一个对象有没有调用set方法
重写这个方法
KVO底层实现

  • 自定义观察类的子类(NSKVONOtifying_**),
  • 重写set方法,在内部回复父类的做法,通知观察者
  • 如何让外界调用类的子类方法,修改当前类的isa指针,指向类的子类
#import "Person+objc.h"
#import <objc/message.h>
#import "SonPerson.h"
NSString *const observerkey = @"observer";
-(void)QW_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context
{
    //  1.  自定义观察类的子类(NSKVONOtifying_**),
    //  2.  重写set方法,在内部回复父类的做法,通知观察者
    //  3.  如何让外界调用类的子类方法,修改当前类的isa指针,指向类的子类
    // 把观察者保存到当前对象中
    objc_setAssociatedObject(self, (__bridge const void *)(observerkey), observer, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    //    修改isa指针
    object_setClass(self, [SonPerson class]);
}
#import "SonPerson.h"
#import <objc/message.h>
extern NSString *const observerkey;
@implementation SonPerson
-(void)setName:(NSString *)name
{
    [super setName:name];
// 通知观察者调用observeValueForKeyPath
// 把观察者保存到当前对象中
// 获取观察者
 id obser =  objc_getAssociatedObject(self, observerkey);
    [obser observeValueForKeyPath:@"name" ofObject:self change:nil context:nil];
}
#import "ViewController..m"
 - (void)viewDidLoad {
    [super viewDidLoad];
-  响应式编程思想 KVO本质是监听一个对象有没有调用set方法
//  重写这个方法
//  KVO底层实现
//  1.  自定义观察类的子类(NSKVONOtifying_**),
//  2.  重写set方法,在内部回复父类的做法,通知观察者
//  3.  如何让外界调用类的子类方法,修改当前类的isa指针,指向类的子类
    Person *p = [[Person alloc]init];
    [p QW_addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
    self.person = p}

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
    NSLog(@"%@",_person.name);
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    static int i  = 0;
    i++;
    self.person.name = [NSString stringWithFormat:@"%d",i];
}

相关文章

  • 响应式编程思想__重写KVO方法

    响应式编程思想 KVO本质是监听一个对象有没有调用set方法重写这个方法KVO底层实现 自定义观察类的子类(NSK...

  • ReactiveCocoa基础篇

    ReactiveCocoa简介 使用了函数响应式编程思想 使用了HOOK思想 统一了代理,通知,Block,KVO...

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

  • 响应式编程思想简介

    响应式编程思想简介

  • 响应式编程思想-KVO底层分析-KVO实现

    1.响应式编程思想 不需要考虑调用顺序,只需要考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流...

  • iOS探索KVO实现原理,重写KVO

    写响应式编程博客时,提到了KVO,今天我们探索一下KVO的实现原理及如何自己实现KVO功能 首先简单的KVO实现 ...

  • iOS -KVO

    KVO-键值观察 KVC:对象取值或者设置值。KVO:监听对象值的变化。 响应式编程的一种。KVO的使用非常简单,...

  • UIButton:

     这种逻辑麻烦的操作,极力建议使用reactiveCocoa这个框架。响应式编程~~~kvo实现https:...

  • iOS RAC 基本使用

    RAC使用函数响应式编程的思想,将我们平时用到的按钮点击事件、KVO、代理、通知等等封装起来,处理业务逻辑的代码放...

网友评论

      本文标题:响应式编程思想__重写KVO方法

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