利用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. NGUI之UIRoot

    原文:http://www.tasharen.com/forum/index.php?topic=6710.0 概述 UIRoot总是放在NGUI UI层级的最上层. 它用来使UI的缩放变得更容易.w ...

  2. 解决:jquery ajax非首次请求Server端获取cookie值中文乱码问题

    HttpCookie cookie = new HttpCookie("RealName", HttpUtility.UrlEncode("你想要设置的值")) ...

  3. WinCE系统深度定制汇总

    WinCE应用程序崩溃提示框的处理 WinCE6.0多国语言软键盘 定制WinCE6.0标准界面的一种方法 如何禁用WinCE下的沙漏图标 Silent RNAApp.exe for WinCE6.0 ...

  4. HDOJ2222 Keywords Search-AC自动机

    Problem Description In the modern time, Search engine came into the life of everybody like Google, B ...

  5. Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

    今天碰到了一个查询异常问题,上网查了一下,感谢原创和译者 如果你使用的数据库连接类是 the Data Access Application Blocks "SqlHelper" ...

  6. The Magic only works with total devotion of one's heart

    The Magic only works with total devotion of one's heart All tools and equipments are useless without ...

  7. android开发--(SimpleAdapter)运用

    SimpleAdapter的参数说明  第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要  第二个参数表示生成一个Map(String ,Object)列表选项    第三个 ...

  8. ios category,protocol理解

    category: 向现有的类中增加方法,同时提供方法的实现,现有类不需要做任何改动. protocol:(相当于Java或C#中的接口interface,当很多类都要需要类似的方法,但是方法具体实现 ...

  9. javascript 面向对象编程指南 的一些题目

    1. function C () { this.a = 1; return false; } console.log (typeof new C()); object function C () { ...

  10. 《高性能JavaScript》笔记

    1. UI Thread 和 UI Queue,中文叫 UI 线程和UI 队列,JavaScript 和  UI 更新共享的进程通常被称为浏览器UI进程. 2. 如果用户企图在任务运行时于页面交互,不 ...