利用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. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛

    1.积分之谜(枚举) 2.完美正方形 3.关联账户(并查集) 4.密文搜索 5.居民集会 6.模型染色 1.积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C.为了促销,每件商品都会返固定 ...

  2. poj 1003 (nyoj 156) Hangover

    点击打开链接 题目大意 就是有很多卡片可以沿着桌边向外放,每次可以伸出1/2,1/3,1/4问最少多少卡片才能让一张完成的卡片悬空,题目输入卡片的宽度,输出卡片个数 #include<stdio ...

  3. 山东ACM省赛历届入口

    山东省第一届ACM大学生程序设计竞赛 山东省第二届ACM大学生程序设计竞赛 山东省第三届ACM大学生程序设计竞赛 山东省第四届ACM大学生程序设计竞赛 山东省第五届ACM大学生程序设计竞赛 山东省第六 ...

  4. Http的请求对象

    Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP ...

  5. 使用get传参的时候,参数在后头获取不到或者出现别的错误。

    把传递的参数使用encode转换一下,符合HTTP规定的编码,再使用. String encode = java.net.URLEncoder.encode("VSrYJoDat8z7Ad9 ...

  6. vim总结

    1.vim基础用法 注:该思维导图来自笔者<Linux就该这么学>读书笔记. 移动光标: 命令 描述 k 向上移动光标(移动一行) j 向下移动光标(移动一行) h 向左移动光标(移动一个 ...

  7. 一个最简单的登录页面测试case

    具体需求: 有一个登陆页面, (假如上面有2个textbox, 一个提交按钮. 请针对这个页面设计30个以上的testcase.) 此题的考察目的:面试者是否熟悉各种测试方法,是否有丰富的Web测试经 ...

  8. sql语句备份

    1.新采购需求查询 SELECT p.sku, g.GoodsName, w.WarehouseID, w.WarehouseName, s.FullNameFROM PurchaseRequires ...

  9. LoadRunner ---手动关联与预关联

    手动关联                                       如果脚本很长,那么我们想找到一个脚本中哪些地方是需要关联的并不是一件容易的事情.这时,我们可以通过脚本对比的方法找 ...

  10. Erlang 从入门到精通(一) 下载安装

    我的电脑配置: 系统:win8.1  x64 内存:16G 在官网下载http://www.erlang.org/