KVC笔记
利用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笔记的更多相关文章
- iOS 开发笔记-Objective-C之KVC、KVO
概述 键值编码(KVC).键值监听(KVO)特性 键值监听KVO Key Value Observing(简称KVO)其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离,当数据模型的属 ...
- Effective Objective-C 读书笔记
一本不错的书,给出了52条建议来优化程序的性能,对初学者有不错的指导作用,但是对高级阶段的程序员可能帮助不是很大.这里贴出部分笔记: 第2条: 使用#improt导入头文件会把头文件的内容全部暴露到目 ...
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.1 Factory
23 DesignPatterns学习笔记:C++语言实现 --- 1.1 Factory 2016-07-18 13:03:43 模式理解
- IOS学习笔记48--一些常见的IOS知识点+面试题
IOS学习笔记48--一些常见的IOS知识点+面试题 1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...
- Objective-C(十七、KVC键值编码及实例说明)——iOS开发基础
结合之前的学习笔记以及參考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,仅仅是作为參考,以苹果官方文档为准~ 十七.键值编码 K ...
- CoordinatorLayout使用笔记
CoordinatorLayout的使用笔记 首先第一个子控件是AppBarLayout存放首部控件,里面放了一个CollapsingToolbarLayout.代码如下: <android.s ...
- 8 Explicit Animations 指明的动画 笔记
8 Explicit Animations 指明的动画 笔记 If you want something done right, do it yourself. 如果你想让事情做好,那就自动来 ...
- ios开发runtime学习五:KVC以及KVO,利用runtime实现字典转模型
一:KVC和KVO的学习 #import "StatusItem.h" /* 1:总结:KVC赋值:1:setValuesForKeysWithDictionary实现原理:遍历字 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
随机推荐
- [CF #288-C] Anya and Ghosts (贪心)
题目链接:http://codeforces.com/contest/508/problem/C 题目大意:给你三个数,m,t,r,代表晚上有m个幽灵,我有无限支蜡烛,每支蜡烛能够亮t秒,房间需要r支 ...
- oracle PL/SQL管理命令语句
一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl ...
- Mysql函数instr、locate、position VS like
Mysql 大家都会用这样的語法: SELECT `column` FROM `table` where `condition` like `%keyword%’ 事实上,可以使用 locate 和 ...
- SQLite事务管理
事务管理对数据库一致性是至关重要的.数据库实现ACID属性以确保一致性.SQLite依赖于本地文件锁和页日志来实现ACID属性.SQLite只支持扁平事务,并不支持事务嵌套和保存点能力. 1.1 事务 ...
- 转:RTC搭建android下三层应用程序访问服务器MsSql-客户端
原文:http://www.cnblogs.com/delphi007/p/3346084.html android下stringgrid已知问题: 通过点击时获取对应行的值有问题,在win下调试正常 ...
- Hibernate框架概念
1.Hibernate是ORM框架,完成对象的持久化操作. 2.允许开发者采用面向对象的方式来操作数据库. 3.安装Hibernate的插件到Eclipse中来自动生成配置文件. 4.Hibernat ...
- 关于Eclipse项目中加入jquery.js文件报错(missing semicolon)问题
在使用Eclipse3.7及以后的版本的时候,加入jQuery文件会报错(missing semicolon),文件中会显示红色小X,虽然这个错误并不会影响项目的运行,但是这个却会大大的影响到开发人员 ...
- 《高性能JavaScript》笔记
1. UI Thread 和 UI Queue,中文叫 UI 线程和UI 队列,JavaScript 和 UI 更新共享的进程通常被称为浏览器UI进程. 2. 如果用户企图在任务运行时于页面交互,不 ...
- IE中无法执行JS脚本 解决WINDOWS SERVER 2008弹出INTERNET EXPLORER增强安全配置正在阻止来自下列网站的内容
在默认状态下,使用Windows Server 2008系统自带的IE浏览器访问网页内容时,我们时常发现“Internet Explorer增强安全配置正在阻止来自下列网站的内容”的提示导致不能打开网 ...
- IE内嵌google chrome frame解决浏览器兼容问题
IE内嵌google chrome frame解决浏览器兼容问题 http://www.cnblogs.com/xwdreamer/archive/2013/12/17/3477776.html 参 ...