有关KVC(一)

2019-03-05  本文已影响0人  击筑渐离

一   前言闲扯淡

一般情况下我们学习一个新的东西的过程,大概是这么一种过程:首先是怀着一种诚惶诚恐的心情接触了这个东西(对高大上的向往和渺小自我的卑微);接着了解这个东西的概念,思前想后的(也可能是徒劳无功)想弄明白这是个什么东西;一头包之后(亲身经历)烦躁而急切的要知道怎么用这个新的知识;然后又想知道什么时候会用到它,什么时候是它派上用场的最佳时机;等你燃烧你的卡路里去搞明白怎么用之后,又在搜索引擎的帮助下了解有关使用它(在学习的知识)的奇技淫巧完成进阶。这一整个流程完成之后,某一次遇到相关问题,你都像紫色的小葫芦娃遇到妖怪一样,掏出小葫芦大喊一声(在心里,喊出声音来那不是神经就是二笔):看法宝!!~~

一般情况下新的知识学习过程是这样的。

以上闲扯跟标题是无关的,~~嘻嘻。(请忍住想骂我的冲动)

以下内容有参考书籍:《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相关知识的冰山一角。

上一篇 下一篇

猜你喜欢

热点阅读