iOS开发系列-UI基础-KVC
这些知识是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的更多相关文章
- iOS开发系列--Objective-C之KVC、KVO
概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...
- iOS开发系列--Objective-C 之 KVC、KVO
概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听( ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- iOS开发系列
因为最近面试了一些人,校招.初中级.高级.架构师,各种级别的,发现大家水平差异很大,有的高级的工程师很多问题都回答不上来,所以想梳理下iOS的知识点,写成一个系列,如果时间允许的话,会录制成视频放到网 ...
- iOS开发系列--C语言之基础知识
概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...
- iOS开发系列--网络开发
概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...
- iOS开发系列--Swift进阶
概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...
- iOS开发系列--让你的应用“动”起来
--iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...
- iOS开发系列--让你的应用“动”起来
--iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...
随机推荐
- c语言,递归翻转一个单链表,c实现单链表
目的:主要是练习c里面单链表的实现,递归思想复习; #include <stdlib.h> #include <stdio.h> typedef struct _Node{// ...
- EasyUI实现异步加载tree(整合Struts2)
首先jsp页面有一ul用于展现Tree <ul id="mytree"></ul> 加载Tree <script type="text/ja ...
- 通过Thrift访问HDFS分布式文件系统的性能瓶颈分析
通过Thrift访问HDFS分布式文件系统的性能瓶颈分析 引言 Hadoop提供的HDFS布式文件存储系统,提供了基于thrift的客户端访问支持,但是因为Thrift自身的访问特点,在高并发的访问情 ...
- Fragment与Activity交互(使用Handler)
1.在Activity中定义一个方法用来设置Handler对象 public void setHandler(Handler handler) {mHandler = handler;} 2.在Fra ...
- 使用LR11录制手机脚本
要使用Loadrunner11录制手机脚本,需要先搭建好测试环境: 能够正常使用的LoadRunner11: 安装一个LR11的补丁包,用于手机录制: pc端和手机端的网络在同一个网段. ...
- C语言递归回溯法迷宫求解
本例将随机产生一个10*10的迷宫输出后,在下面输出此迷宫的解法. 解法为从坐标(1,1)处进入,从(8,8,)出去,优先线路为先右后下再上最后为左. 不少人求解此题时运用的栈的相关知识,本例寻找线路 ...
- hdu1040
#include<stdio.h>#include<stdlib.h>int a[100];int cmp(const void *a,const void *b){ retu ...
- php bin/console doctrine:migrations:migrate
$ php bin/console doctrine:migrations:migrate XinXiBundleMigrationsWARNING! You a ...
- 数据结构之Heap (Java)
Heap简介 Heap译为“堆”,是一种特殊的树形数据结构,它满足所有堆的特性:父节点的值大于等于子节点的值(max heap),或者小于等于子节点的值(min heap).对于max heap 根节 ...
- [大山中学dp常练-4 Rounds]
Round#1 2016.9.28 这次晚练十分sb 有点浪费时间 全是dp题 先说过程 3分钟草了第一题之后感觉好像有点水 然后翻了翻题目 看了看第一第四题两颗星 其他三颗星 然后一下子第二题题目太 ...