一、KVO键值转换设计模式
注:KVO键值转换设计模式中需要注意的地方有: 一:观察的对象必须是全局对象,这样就不会在viewDidLoad结束后消亡。二:移除观察需要另外写在一个事件当中。三:观察者一般为self
。
#import "ViewController.h"
#import "YZBPerson.h"
@interface ViewController ()
@end
@implementation ViewController
{
YZBPerson * person; //最重要的一步:就是要把需要观察的对象做成全局对象,这样就不会在viewDidLoad结束后消亡。
}
- (void)viewDidLoad {
[superviewDidLoad];
person = [[YZBPersonalloc]init];
person.name =@"张三";
person.age =22;
//KVO第一步:注册观察,Options有四种:
//第一种是监察初始化时:NSKeyValueObservingOptionInitial,可以在初始化时,进行监察
//第二种是监察值变化时:NSKeyValueObservingOptionNew,可以在实现观察的方法中,得到新的值
//第三种是监察值变化时:NSKeyValueObservingOptionOld,可以在实现观察的方法中,得到原本的值
//第四种是监察值变化时:NSKeyValueObservingOptionPrior,可以在实现观察的方法中,得到第一次赋值产生的事件
[personaddObserver:selfforKeyPath:@"name"options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNewcontext:@"2222"];
}
//KVO第二步:实现回调的行为,你观察的对象的属性发生变化了
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
NSString * name = [changeobjectForKey:@"new"];
NSLog(@"%@", name);
NSLog(@"key = %@, change = %@, contest = %@",keyPath, change, context);
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)btnTap2:(id)sender {
person.name =@"李四";
}