美文网首页
对于KVO设计模式(KVO的简单使用)

对于KVO设计模式(KVO的简单使用)

作者: 迷失的昨天 | 来源:发表于2016-04-07 21:00 被阅读0次

    简单概述下 KVO 的实现:

    当你观察一个对象时,一个新的类会动态被创建。这个类继承自该对象的原本的类,并重写了被观察属性的 setter 方法。自然,重写的 setter

    方法会负责在调用原 setter 方法之前和之后,通知所有观察对象值的更改。最后把这个对象的 isa 指针 ( isa 指针告诉 Runtime

    系统这个对象的类是什么 ) 指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例。

    下面是代码实现

    @interface ViewController ()@property (nonatomic, strong) NSMutableArray *array;

    @end

    @implementation ViewController- (void)dealloc{   

    //只要使用KVO,那就一定要写这移除观察者的方法   

    [self removeObserver:self forKeyPath:@"array"];

    }

    - (void)viewDidLoad {   

    [super viewDidLoad]; 

      // 添加一个观察者  

    // 第一个参数 : 被观察者

    //第一个self表示观察者  

    // 第二个参数 : 哪一个属性被观察  

    // 第三个参数 : 什么时候触发观察者的方法  

    // 第四个参数 : 保险,可以添加一些字符串  

    //谁去观察谁的那个属性,检查它变化的时间  

    self.array = [NSMutableArray array];   

    //KVC的方法  数组 

      [self addObserver:self forKeyPath:@"array" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:nil];    }- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{    NSArray *array = @[@"1", @"2"];     

      [[self mutableArrayValueForKeyPath:@"array"] setArray:array];   

    }

    // 观察者模式触发的方法

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context

    {

    NSLog(@"keyPath ==== %@", keyPath);

    NSLog(@"object ===== %@", object);

    NSLog(@"change ====== %@", change);

    }

    相关文章

      网友评论

          本文标题:对于KVO设计模式(KVO的简单使用)

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