这些知识是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. 顺手的Linux发行版及其工具推荐

    从Windows切换到Linux已经有半年多的时间了,简单给大家推荐一些个人感觉不错的软件,主要都是和开发相关的通用软件--- 0.archlinux  挑一个比较顺手的linux发行版当然是首要任务 ...

  2. Jenkins中关于一些插件的使用

    Jenkins中关于一些插件的使用方法 最近在为公司搭建CI平台过程中,以及在具体项目实施过程中使用过的一些插件的具体用法: 1. ant插件 这个插件可能是我们最为经常使用的,若构建脚本是使用bui ...

  3. Redis系统学习 一、基础知识

    1.数据库 select 1  select 0 2.命令.关键字和值 redis不仅仅是一种简单的关键字-值型存储,从其核心概念来看,Redsi的5种数据结构中的每一个都至少有一个关键字和一个值.在 ...

  4. 依赖注入(IOC)

    依赖注入(IOC) 背景介绍 在设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系,变依赖具体为依赖抽象.平时开发中如果发现客户程序依赖某个或某类对象,我们常常会对他们进行一次抽象,形成抽 ...

  5. Ajax实现天气预报功能

    实现天气预报功能 闲来无聊,写下此文 经常看见很多网站上有那种天气预报功能,自己之前也写过一个,不过属于那种涉及WCF服务引用那种,今天发现一个更为简单的方式来实现,使用Javascript和Ajax ...

  6. Bottle GET method. Request

    python bottle framework #!/usr/bin/python # -*- coding utf-8 -*- from bottle import route, run, debu ...

  7. Servlet部署描述文件(web.xml)

    最近看了下配置文件(Deployment Descriptor:简称DD),又称部署描述文件,下面详细介绍下该文件的组成和作用: 一.<web-app>有四个属性: 1.xmlns:申明了 ...

  8. Android 开发环境 —— Eclipse 启动时报错:Error when loading the SDK

    简述: Eclipse 启动时报错:Error when loading the SDK 错误信息: Error when loading the SDK: Error: Error parsing  ...

  9. Spark 2.x不支持ALTER TABLE ADD COLUMNS,没关系,我们改进下

    SparkSQL从2.0开始已经不再支持ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], .. ...

  10. java导出生成csv文件

    首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我 ...