键值观察者_KVO

Key Value Observing, 顾名思义就是一种observer(观察) 模式用于监听property(属性)的变化,KVO跟NSNotification有很多相似的地方.

  1. 用addObserver:forKeyPath:options:context:去start observer
  2. 用removeObserver:forKeyPath:context去stop observer
  1. 回调就是observeValueForKeyPath:ofObject:change:context:。

使用场景:在你页面的数据或控件发生变化时(例如:上拉,下拉来刷新页面时)需要调用一个方法,来重新加载数据时

//Copyright © 2016年 xiaojie. All rights reserved.
#import “ViewController.h”
@interface ViewController ()
//声明一个属性,用来做被观察者的属性
@property (nonatomic, strong)NSMutableArray *array;
@end
@implementation ViewController
– (void)viewDidLoad {
[super viewDidLoad];
//@1:初始化被观察者的属性
self.array = [NSMutableArray array];
//@2:添加被观察者
//self: 表示被观察者
//参数一: 表示观察者
//参数二: 表示被观察者的一个属性
//参数三: 表示什么时候触发观察者的方法
//参数四: 保险 可以添加一些字符串
[self addObserver:self forKeyPath:@”array” options:NSKeyValueObservingOptionNew context:nil];
}
//@3:观察者触发的方法
– (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@”keyPath = %@”, keyPath);
NSLog(@”object = %@”, object);
NSLog(@”change = %@”, change);
}
//@5:添加一个手势方法,当点击的时候,触发观察者模式
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSArray *array = @[@”1″, @”2″];
[[self mutableArrayValueForKeyPath:@”array”] setArray:array];
}
//@4:移除观察者
– (void)dealloc{
//只要使用了KVO , 那就一定要写移除观察者的方法(如果有两个同名的被观察者,在移除时会崩溃)
[self removeObserver:self forKeyPath:@”array”];
}
– (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end```

你可能感兴趣的:(键值观察者_KVO)