OC ___KVC
2015-07-25 19:26
253 查看
Key-Value-Coding:键值编码,是一种间接访问实例变量的方法,优势在于不通过setter和getter方法改变实例变量的值,而是有一套改变值的系统.
赋值原理:给定一个key,比如@"name":
1.先查找对象中有没有对应的setName:方法,
如果有直接调用该方法为对象的实例变量赋值, 如果没有转步骤2
2.再查找对象中有没有定义实例变量为_name,
如果有直接为该实例变量赋值, 否则转步骤3
3.查找对象中有没有定义实例变量叫name,
如果有直接为该实例变量赋值, 否则转步骤4
4.自动调用对象中的方法setValue:forUndefinedKey:
KVC取值过程:调用valueForKey:,
给定一个key比如name
1.查找对象中有没有对应的name方法(即get方法),
如果有则调用该方法返回对应的实力变脸的值, 如果没有转步骤2
2.查找有有没有对应的_name实例变量,
如果有直接取出该实例变量中存放的值, 否则转步骤3
3.查找有没有对应的name实例变量,
如果有直接取出该实例变量中存放的值, 否则转步骤4
4.自动调用对象中的方法valueForUndefinedKey: .
使用KVC的时候要重写两个方法
- (void)setValue:(id)value forUndefinedKey:(NSString*)key;
- (id)valueForUndefinedKey:(NSString*)key;
赋值原理:给定一个key,比如@"name":
1.先查找对象中有没有对应的setName:方法,
如果有直接调用该方法为对象的实例变量赋值, 如果没有转步骤2
2.再查找对象中有没有定义实例变量为_name,
如果有直接为该实例变量赋值, 否则转步骤3
3.查找对象中有没有定义实例变量叫name,
如果有直接为该实例变量赋值, 否则转步骤4
4.自动调用对象中的方法setValue:forUndefinedKey:
KVC取值过程:调用valueForKey:,
给定一个key比如name
1.查找对象中有没有对应的name方法(即get方法),
如果有则调用该方法返回对应的实力变脸的值, 如果没有转步骤2
2.查找有有没有对应的_name实例变量,
如果有直接取出该实例变量中存放的值, 否则转步骤3
3.查找有没有对应的name实例变量,
如果有直接取出该实例变量中存放的值, 否则转步骤4
4.自动调用对象中的方法valueForUndefinedKey: .
使用KVC的时候要重写两个方法
- (void)setValue:(id)value forUndefinedKey:(NSString*)key;
- (id)valueForUndefinedKey:(NSString*)key;
相关文章推荐
- 《深入浅出struts2》--第七章,类型转换
- 一刀斩 :“SVN” failed to start 服务启动失败
- 【差分序列】【NOIP2012】借教室
- mysql常见操作汇总
- Problem C 链表
- 工作小结
- Python项目8:使用XML-RPC进行文件共享
- dma_alloc_coherent (建立一致性 DMA 映射函数)
- 快速排序算法笔记
- hd2277
- UVA - 10976 Fractions Again?!
- js输入当前页面的HTML代码
- 【LeetCode】239. Sliding Window Maximum
- 数据类型运算符和变量
- 2015.07.25总结
- OC_路径寻找
- 股票学习(技术指标--个股贡献度)
- 图的深度遍历
- springMVC的前端控制器的配置
- Combination Sum III