利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改)

示例代码:

 示例一:

Person *p = [[Person alloc] init];

p.dog = [[Dog alloc] init];

// 输出结果都一样

p.dog.name = @"wangcai";

[p.dog setValue:@"laifu" forKey:@"name"];

[p.dog setValue:@"haha" forKey:@"name"];

[p.dog setValue:@"laifu" forKeyPath:@"name"];

[p.dog setValue:@"haha" forKeyPath:@"name"];

// 区别

// forKeyPath包含了forKey的功能, 以后使用forKeyPath

// forKeyPath中可以利用.运算符, 一层一层往下查找对象的属性

//        [p setValue:@"laifu" forKey:@"dog.name"];   // 错误:没有dog.name的key

[p setValue:@"haha" forKeyPath:@"dog.name"];

NSLog(@"%@", p.dog.name);

示例二:

Person *p = [[Person alloc] init];

p.dog = [[Dog alloc] init];

p.dog.bone = [[Bone alloc] init];

p.dog.bone.type = @"骨头";

[p setValue:@"肉" forKeyPath:@"dog.bone.type"];

[p.dog setValue:@"肉" forKeyPath:@"bone.type"];

[p.dog.bone setValue:@"肉" forKeyPath:@"type"];

示例三: 用于获取值

Book *b1 = [[Book alloc] init];

b1.name = @"iOS";

b1.price = 10.5;

NSLog(@"%@", [b1 valueForKeyPath:@"name"]);

示例四:其他用法

Person *p = [[Person alloc] init];

Book *b1 = [[Book alloc] init];

b1.name = @"iOS";

b1.price = 10.5;

Book *b2 = [[Book alloc] init];

b2.name = @"Android";

b2.price = 15.5;

Book *b3 = [[Book alloc] init];

b3.name = @"PHP";

b3.price = 12.5;

Book *b4 = [[Book alloc] init];

b4.name = @"前端";

b4.price = 8;

p.books = @[b1, b2, b3, b4];

// 取出books数组中每一个元素的name属性值, 放到一个新的数组中返回

NSArray *names = [p valueForKeyPath:@"books.name"];

NSLog(@"%@", names);

// 利用KVC求和

double sum = [[p valueForKeyPath:@"books.@sum.price"] doubleValue];

// 利用KVC求平均

double average = [[p valueForKeyPath:@"books.@avg.price"] doubleValue];

KVC笔记的更多相关文章

  1. iOS 开发笔记-Objective-C之KVC、KVO

    概述 键值编码(KVC).键值监听(KVO)特性 键值监听KVO Key Value Observing(简称KVO)其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离,当数据模型的属 ...

  2. Effective Objective-C 读书笔记

    一本不错的书,给出了52条建议来优化程序的性能,对初学者有不错的指导作用,但是对高级阶段的程序员可能帮助不是很大.这里贴出部分笔记: 第2条: 使用#improt导入头文件会把头文件的内容全部暴露到目 ...

  3. 23 DesignPatterns学习笔记:C++语言实现 --- 1.1 Factory

    23 DesignPatterns学习笔记:C++语言实现 --- 1.1 Factory 2016-07-18 13:03:43 模式理解

  4. IOS学习笔记48--一些常见的IOS知识点+面试题

      IOS学习笔记48--一些常见的IOS知识点+面试题   1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...

  5. Objective-C(十七、KVC键值编码及实例说明)——iOS开发基础

    结合之前的学习笔记以及參考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,仅仅是作为參考,以苹果官方文档为准~ 十七.键值编码 K ...

  6. CoordinatorLayout使用笔记

    CoordinatorLayout的使用笔记 首先第一个子控件是AppBarLayout存放首部控件,里面放了一个CollapsingToolbarLayout.代码如下: <android.s ...

  7. 8 Explicit Animations 指明的动画 笔记

    8 Explicit Animations 指明的动画 笔记     If you want something done right, do it yourself. 如果你想让事情做好,那就自动来 ...

  8. ios开发runtime学习五:KVC以及KVO,利用runtime实现字典转模型

    一:KVC和KVO的学习 #import "StatusItem.h" /* 1:总结:KVC赋值:1:setValuesForKeysWithDictionary实现原理:遍历字 ...

  9. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

随机推荐

  1. Struts2.3.4+Hibernate4.2.4+Mysql6.0整合

    1.项目搭建过程: (1). 创建一个Web Project.导入Struts2和Hibernate的jar包.(如果不知道Struts2的jar包,可以在下载的struts的jar包中,找到apps ...

  2. JAVA设计模式之解释器模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述解释器(Interpreter)模式的: 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个 ...

  3. 【knowledgebase】不要在一个很大的RDD上调用collect

    如果一个RDD很大以至于它的所有元素并不能在driver端机器的内存中存放下,请不要进行如下调用: val values = myVeryLargeRDD.collect()   collect将尝试 ...

  4. Multiverse in Doctor Strange // Multiverse在《神秘博士》

    关于<神秘博士>的制作内容 https://www.fxguide.com/quicktakes/bonus-luma-pictures-new-tools-for-doctor-stra ...

  5. EXT学习之——Ext两个js之间的传参

    A  的js访问 B的js,并将A选择的guid的行传到  B的 js进行处理事项 A 的js 的写法var receiverFrom = new xxx.xxx子js方法体名 ({ parentCm ...

  6. MSSQLSERVER之发布-分发-订阅

    一.环境 发布服务器 O S: Windows servier 2003 64位 Soft: Microsoft SqlServer 2008 R2 I P: 192.168.3.70 HOST-NA ...

  7. zabbix3.0.4监控mysql主从同步

    zabbix3.0.4监控mysql主从同步 1.监控mysql主从同步原理: 执行一个命令 mysql -u zabbix -pzabbix -e 'show slave status\G' 我们在 ...

  8. CentOS6 搭建Git仓库

    近期上了Redmine以后,系统集成了Git的联动功能,于是萌生了搭建内网仓库的想法,特此记录一下: 1.安装Git yum -y install git 2.创建用户及密码 useradd git ...

  9. HTML <!DOCTYPE> Declaration

    <!DOCTYPE html><html><head><title>Title of the document</title></he ...

  10. Web前端之html_day2

    1.meta标签 1 2 3 <metacharset="UTF-8"/> <metaname="Keywords" content=&quo ...