KVC KVO
1.KVC
KVC是Key-Value-Coding的简称,它是一种可以直接通过字符串的名字(key)来访问类属性(实例变量)的机制。而不是通过调用Setter、Getter方法访问。当使用KVO、Core Data、CocoaBindings、AppleScript(Mac支持)时,KVC是关键技术。
Person * xw = [[Person alloc]init];
Dog *dg = [[Dog alloc]init];
//使用kvc设置成员变量的值
//使用之前必须得知道变量的名
[xw setValue:@"xiaowang" forKey:@"name"];
NSString * name = [xw valueForKey:@"name"];
NSLog(@"%@",name);
//设置对象里的某个类的某个属性
//确定类的对象是存在的
[xw setValue:dg forKey:@"dg"];
[xw setValue:@"wangwang" forKeyPath:@"dg.dogName"];
NSString * dname = [xw valueForKeyPath:@"dg.dogName"];
NSLog(@"%@",dname);
2.KVO
KVO,即:Key-Value-Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
系统框架已经支持KVO,所以程序员在使用的时候非常简单。
1. 注册,指定被观察者的属性,
2. 实现回调方法
3. 移除观察
-(instancetype)init{
if (self =[super init]) {
self.card = [[[Card alloc]init]autorelease];
//监听器监听card中money的变化
[self addObserver:self forKeyPath:@"card.money"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
}
return self;
}
//回调
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
NSLog(@"%d",[[change objectForKey:NSKeyValueChangeOldKey]intValue]);
NSLog(@"%d",[[change objectForKey:NSKeyValueChangeNewKey]intValue]);
}
//销毁
-(void)dealloc{
[self removeObserver:self forKeyPath:@"card.money"];
[super dealloc];
}