这些知识是UI初级学习的,目前我还在学习中,适合初学者看

KVC—Key Value Coding 也就是键值编码 是一种获取值和设置值的方式

当我们创建一个类文件,为这个类设置成员属性的时候:

创建一个“人”类:有名字(name), 年龄(age)两个公有的成员属性:

因为使用@property关键字,会在HFPerson.m中,直接生成setter(设置值) 、getter(获取值)方法,也就是对应的点语法。因为两个成员属性是公有的,我们可以在任何地方访问这些属性 例如我在main.m中,创建一个人类对象,给name属性赋值

那么既然有了setter和getter方法,为什么还要有KVC获取值和设置值的方法呢?

下面介绍一下KVC比普通setter 和 getter 方法强大的地方

我在HFPerson.m文件中添加一个延展,也就是人类的私有属性sex(性别)属性,

此时我们用断点看一下,人类对象中是有sex属性

下面我在main.m中给p1对象设置sex属性,看看会出现什么情况:

我们是没有办法在别的类中访问本类的私有属性的,那么我现在想实现在main.m中获取或者设置sex属性,那么怎么实现呢?

下面介绍KVC第一个强大的地方:

在KVC眼中,没有私有属性,任何属性都可以访问的到,那么我们用KVC在Main.m中设置p1对象的sex属性,并且获取sex属性

此时我们通过KVC给p1的sex私有属性,设置了值,也获取到了值,这是setter getter无法做到的,

这个方法名字:- (void)setValue:(nullable id)value forKey:(NSString *)key;

下面介绍一下方法:- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;这个方法可以实现上面方法的功能,那么和上面的方法有什么区别呢?

现在有一个新的需求:创建一个“书”(book)类,这个类中有一个名字(bookName)私有属性,此时我给刚才创建的人类添加一个(book)对象属性

接下来,我在main.m中创建书对象,赋值给p1对象的book属性

现在有一个新的需求,如何通过p1设置或者获取book的私有属性(bookName)的值?普通点语法肯定做不到

那么我用- (void)setValue:(nullable id)value forKey:(NSString *)key;方法呢

book.bookName 不是p1对象的属性成员。book是p1对象的属性成员,而bookName是book的属性成员 那么这个时候怎么通过p1直接修改bookName呢?

使用- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;方法

介绍一下这个方法,[p1 setValue:@"九阴真经" forKeyPath:@"book.bookName"];使用这个方法的时候,它会认为 . 前面是一个对象,这个对象是p1对象的成员属性, . 后面是这个对象的成员属性。这是这个方法独有的功能;

接下来,介绍一下第二个强大的功能:

就先介绍这几个功能吧,目前就学了这几个,以后有新的发现,会及时更新的。

第一次写博客,希望大家能看懂。

iOS开发系列-UI基础-KVC的更多相关文章

  1. iOS开发系列--Objective-C之KVC、KVO

    概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...

  2. iOS开发系列--Objective-C 之 KVC、KVO

    概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...

  3. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  4. iOS开发系列

    因为最近面试了一些人,校招.初中级.高级.架构师,各种级别的,发现大家水平差异很大,有的高级的工程师很多问题都回答不上来,所以想梳理下iOS的知识点,写成一个系列,如果时间允许的话,会录制成视频放到网 ...

  5. iOS开发系列--C语言之基础知识

    概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...

  6. iOS开发系列--网络开发

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

  7. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  8. iOS开发系列--让你的应用“动”起来

    --iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...

  9. iOS开发系列--让你的应用“动”起来

    --iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...

随机推荐

  1. C#做的颜色工具

    常常会用到绘制以及配色,每次看到 framework 里边的 KnowColor.xxx 我就一阵......到底啥颜色啊,干脆做一个一劳永逸的工具吧.功能包含: 可以实现枚举所有系统颜色 圆形.矩形 ...

  2. web前端学习笔记

    web前端学习笔记(CSS盒子的定位) 相对定位 使用相对定位的盒子的位置常以标准流的排版方式为基础,然后使盒子相对于它在原本的标准位置偏移指定的距离.相对定位的盒子仍在标准流中,它后面的盒子仍以标准 ...

  3. 快速开发平台WebBuilder中ExtJS表格的增删改查

    使用WebBuilder可实现表格的自动增删改查功能,而无需编写前台脚本和后台SQL. WebBuilder开源项目地址:http://www.putdb.com 自动生成的页面: <!DOCT ...

  4. 仿腾讯微博的一个弹出框 v0.1 beta

    仿腾讯微博的一个弹出框 v0.1 beta   代码写的不太好,新手请大家海涵,只为博君一笑,勿放在心上. 写在这里留作纪念,也许以后用的到. 效果 CSS .prompt{ position: ab ...

  5. EventBus实现 - 发布订阅 - XML加载

    EventBus实现 - 发布订阅 - XML加载 受到CQRS的影响,写了个EventBus,能实现发布订阅模式执行event,在DDD模型中,可以使用如下代码触发事件: EventBus bus ...

  6. QSQL导出mapfile和mapfile中PostGIS连接的一点心得

    昨天弄QSQL导出mapfile,一直遇到下图的错误 原因是QGIS在渲染图层时候使用了新的符号,在图层上右键-属性,如下图将符号修改就OK了 然后我尝试使用QGIS连接本机PostGIS数据,结果老 ...

  7. MFC控件(7):Split Button

    VS2008中可以看到MFC有一个叫Split Button的控件,要想看它的效果,瞧下QQ那聊天窗口的"发送", "消息记录"这两个按钮就知道了.实际上就是还 ...

  8. Python2 中文编码处理

    今天写了几个脚本,都遇到了中英文混编的情况.需求要将其中的中文标点符号切换为英文符号. 举个例子: tags = '你好,good, 国语' 要将其中的中文半角逗号替换为英文逗号,为了方便后续的处理 ...

  9. Ubuntu12.04 Eclipse 提示框背景色修改

    I had to edit these files: /usr/share/themes/Ambiance/gtk-3.0/settings.ini /usr/share/themes/Ambianc ...

  10. 不要错过 DevOps 之父出席的2017 DevOpsDays 北京站!

    通过 DevOpsDays 活动,Patrick 将 DevOps 这项伟大的运动带到了地球的东方,带到了北京.同时,他将亲自参加2017年3月18日的 DevOpsDays 北京站,并作精彩演讲. ...