KVO __ 浅谈

KVO :Key-Value Observing

它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

  例 : self.array = [NSMutableArray array];

1.  添加一个观察者

 

  

 

 

[self addObserver:self forKeyPath:@"array" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];

 

     第一个self表示观察者

     第一个参数 : 被观察者

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

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

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

  表示 :   谁去观察谁的哪一个属性,观察它变化的时间

 

2. 被观察者发生变化 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSArray *array = @[@"1", @"2"];
    //字典用这个
//    self mutableSetValueForKeyPath:<#(nonnull NSString *)#>:
    //KVC方法
    [[self mutableArrayValueForKeyPath:@"array"] setArray:array];
}

 

3. 观察者模式触发的方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
    NSLog(@"keyPath == %@", keyPath);
    NSLog(@"object == %@", object);
    NSLog(@"change == %@", change);
}

4. 移除观察者的方法

- (void)dealloc
{
    // 只要使用KVO 那就一定要写这个 移除观察者的方法
    [self removeObserver:self forKeyPath:@"array"];
}

 

posted @ 2016-04-07 20:43  二十几岁的某一天  阅读(195)  评论(0编辑  收藏  举报