KVO — 键值观察者模式

三步:
1.添加一个观察者
2.实现 观察者模式触发的方法
3.移除观察者的方法

一般在ARC情况下,dealloc 中实现的方法:
1.释放观察者 ,2.释放代理

- (void)dealloc
{   
    3. 只要写了 KVO,那就一定要写移除观察者的方法   
    [self removeObserver:self forKeyPath:@"array"];
}
- (void)viewDidLoad
 {   
    [super viewDidLoad];    
//KVO : (Key - value - Observer) 键值观察者    
self.array = [NSMutableArray array];       
//1. 添加一个观察者       
// 第一个self 表示观察者    
// 第一个参数 : 被观察者    
// 第二个参数 : 哪一个属性    
// 第三个参数 : 什么时候触发观察者的方法    
// 第四个参数 : 保险, 可以添加一些字符串,一般是nil  
// 谁去观察谁的哪一个属性,检查他变化的时间    
[self addObserver:self forKeyPath:@"array" options:(NSKeyValueObservingOptionNew) context:nil];   
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{    NSArray *array = @[@"1", @"2"];   
// [self.array setArray:array]; 这样不可以观察一个初始化过的数组 ,不会触发 observe 方法   
// self mutableSetValueForKeyPath:<#(nonnull NSString *)#>  这个是观察无序的,字典或者集合       
// KVC的方法    
[[self mutableArrayValueForKeyPath:@"array"] setArray:array];    
//这个是有序的,数组,这样才会触发observe方法

}
// 2. 观察者模式触发的方法- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{   
 NSLog(@"keypath === %@", keyPath);    
 NSLog(@"object  === %@", object);    
 NSLog(@"change === %@",change);
}

你可能感兴趣的:(KVO — 键值观察者模式)