-(void)btnClick:(UIButton *)btn{
if (btn.tag == 100) {
//修改Teacher的变量
}
else{
//修改Student的变量
[_sm setValue:@"xiaoxin" forKey:@"name"];
}
}
//给成员变量赋值
-(void)setValues{
_sm = [[StudentModel alloc]init];
_tm = [[TeacherModel alloc]init];
//1.通过点语法给对象的变量赋值
_sm.name = @"xiaoming";
//通过点语法获取对象的变量的值
NSLog(@"student name = %@",_sm.name);
//2.使用KVC的方式给对象的变量赋值
//KVC:键值编码。是一种可以通过字符串(key)直接访问对象的变量的机制。
[_sm setValue:@"xiaobai" forKey:@"name"];
//使用KVC方式获取对象的变量的值
NSLog(@"_sm.name = %@",[_sm valueForKey:@"name"]);
//KVO:键值观察。当被观察的对象的属性发生改变时,会通知观察者。
//要观察哪个对象,哪个对象添加观察者。
/*
第一个参数:观察者 --> self
第二个参数:要观察的对象的属性
第三个参数:要观察的对象的属性的几种变化方式 --> 新旧值观察
第四个参数:nil
*/
[_sm addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
}
//当被观察的对象的属性发生改变时,会通知观察者。调用该方法。
/*
第一个参数:被观察的对象的属性
第二个参数:被观察的对象
第三个参数:属性的改变 --> 属性的新旧值
*/
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if ([object isKindOfClass:[StudentModel class]]) {
NSLog(@"old:%@",[change objectForKey:@"old"]);
NSLog(@"new:%@",[change objectForKey:@"new"]);
}
}