KVC和KVO的基本知识点
//1.KVC 的基本知识点。
key value coding 键值编码
//通过字符串的方式给对象的属性赋值/取值
StudentModel *model = [[StudentModel alloc] init];
//通过setter 和 getter 方法
model.student_name = @"倪煌";
NSString *name = model.student_name; NSLog(@"name %@",name);
//通过kvc的方式
//参数一 是对象对应的属性名字为key的 值
//参数二 是对象属性的名字 如果不一样要做特殊的处理否则会崩
[model setValue:@"小殊" forKey:@"student_name"];
//参数是对象的属性名字 如果这个类没有这个字符串对应的属性不做特殊处理崩
NSString *name2 = [model valueForKey:@"student_name"];
//this class is not key value coding-compliant for the key student_nam.
NSLog(@"name %@",name2);
//模拟获得一个字典
NSDictionary *dict = @{@"student_name":@"七皇子",@"studeny_home":@"大梁",@"student_age":@"31"};
StudentModel *model2 = [[StudentModel alloc]init];
//把一个字典key-value 转化为对象的属性 对应的值
[model2 setValuesForKeysWithDictionary:dict];
NSLog(@"name %@",model2.student_name);
NSLog(@"home %@",model2.studeny_home);
//讨论如果字典中有key 值在我们的类中没有对应的属性
NSString *sex = [model2 valueForKey:@"student_sex"];
//2.KVO基本知识点
//KVO key value observing 键值观察(观察者模式)
//监听某个对象的属性值的变化
self.model = [[BookModel alloc]init];
//如果 观察者 观察了某个对象的属性一定要实现
//-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
//参数一 观察者
//参数二 被观察对象的属性
//参数三 枚举
//参数四 上下文
[_model addObserver:self forKeyPath:@"bookName" options:NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:@"我就是测试下"];
_model.bookName = @"计算机网络";
_model.bookName = @"计算机网";
//self 是观察者 观察的是 self.view 的背景颜色
[self.view addObserver:self forKeyPath:@"backgroundColor" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];