//KVC key valve coding (键值编码)
//优点:不用set .get方法给成员变量{}赋值;间接给属性赋值;减少代码量.封装model类
//缺点:编译时不报错,运行时报错
//使用的时候,注意key不要写错
//1.
//如果输出id类型的数据,需要用%@,占位符
//测试kvc是先访问带下划线的属性,如果没有才访问不带下划线的属性
//如果键写错了,编译时不报错,运行时报错
//2.
//间接给属性赋值
//car是people的属性
//name是car的属性
//car需要在people类中初始化
///forKeyPath是关键
//使用valueForKeyPath的时候需要初始化car
//3.
//如果字典中存在该类不存在的属性,要去类的.m中重写不然运行会崩溃
//重写系统的方法(对于多出来的键值对,运行时才不会崩溃)
//- (void)setValue:(id)value forUndefinedKey:(NSString *)key
//对于属性多的model,可批量处理,给属性赋值,减少代码量
//在.m赋值时可调用该方法[self setValuesForKeysWithDictionary:dic];
//4.
//copy和retain的区别
//copy的话,输出不会一致只是copy路径和数据,不会随之更新内容(深)
//retain的话,输出的内容是一致会随着赋值属性内容的改变而改变(浅)
//00000
//如果同时实现了set,get方法,需要在{}中声明_name属性
//成员变量没有实现set,get方法,所以不会调用
//以kvc的方式给属性name赋值,会调用set,get方法