一 前言闲扯淡
一般情况下我们学习一个新的东西的过程,大概是这么一种过程:首先是怀着一种诚惶诚恐的心情接触了这个东西(对高大上的向往和渺小自我的卑微);接着了解这个东西的概念,思前想后的(也可能是徒劳无功)想弄明白这是个什么东西;一头包之后(亲身经历)烦躁而急切的要知道怎么用这个新的知识;然后又想知道什么时候会用到它,什么时候是它派上用场的最佳时机;等你燃烧你的卡路里去搞明白怎么用之后,又在搜索引擎的帮助下了解有关使用它(在学习的知识)的奇技淫巧完成进阶。这一整个流程完成之后,某一次遇到相关问题,你都像紫色的小葫芦娃遇到妖怪一样,掏出小葫芦大喊一声(在心里,喊出声音来那不是神经就是二笔):看法宝!!~~
一般情况下新的知识学习过程是这样的。
以上闲扯跟标题是无关的,~~嘻嘻。(请忍住想骂我的冲动)
以下内容有参考书籍:《iOS开发快速进阶与实战》(感觉不错的一本书,作者黄新宇)
二 先了解什么是KVC
KVC 是Key-Value-Coding的缩写,中文译名是键值编码。是Cocoa框架为我们提供的非常强大的工具,依赖于强大的Runtime机制,在Objective-C的动态性方面发挥了重要作用。
KVC的组要功能是通过变量名称字符串来访问成员变量,无论私有Or公有。
可以在运行时动态的访问跟修改属性,而不是在编译时。
如果有人(很大可能是面试官)问你什么是KVC,以上的内容似乎可以应付了他的概念询问---只是似乎而已。
我们貌似完成了学习的第一步----学习了kvc 的概念。其实跟没学一样,因为所谓了解,并不是你记住了它的文字解释,而是你真的知道这是个什么东西。
为了叙述的方便,先创建一个Person类:
图2.1这个类有两个属性,一个年龄age ,一个名字。
然后在控制器中设置person属性,完成初始化
图2.2那我们先来实验一下前文KVC概念中叙述的功能----他是可以以字符串键形式访问对象属性。
图2.3打印结果:
图2.4确实,我们成功的给person对象的name属性赋值"张三"---是通过字符串键的形式。
到此有个疑问,这个过程,有没有触发person对象的set 方法?
发生以上过程的时候
图2.5可以证明,KVC对属性的赋值,也是会触发对应属性的set 方法。
再试试用KVC来获取成员变量的值
用到的API:
图2.6示例代码:
图2.7打印结果:
图2.8到此,我们算是对KVC完成最基本的了解----它可以通过变量名称字符串来访问成员变量。
或许,以上所探讨的可以回答"什么是KVC的问题",但是对于"说说你对KVC的理解"这个问题,用以上回答就显得有些捉襟见肘。
KVC对成员变量的访问是怎么工作的呢?
先来看看KVC访问成员变量的查找顺序:
我们调用方法 :
图2.9它的查找顺序是:
1)访问setXxx:方法;
2)访问_xxx成员变量;
3)访问_isXxx成员变量;
4)访问xxx成员变量;
5) 访问isXxx成员变量。、
按照这个查找顺序逐次查找,直到找到为止,如果最后一个也找不到,就会调用
图2.10到这里,我可以说,我掌握了KVC最基本的知识点并且了解了它以字符串访问属性值时候的查找顺序。但是,这只是KVC相关知识的冰山一角。
网友评论