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 ...
随机推荐
- mysql <-> sqlite
在做程序时,sqlite数据很方便.用mysql数据导出到sqlite的步骤:(用csv文件过渡) ------------------------------- 先导出到csv文件 ------ ...
- js 正则
/判断输入内容是否为空 function IsNull(){ var str = document.getElementById('str').value.trim(); ...
- centos6.4安装VMwareTools
centos6.4安装VMware Tools,同样适用于VMware.ESXi.Hypervisor #如果文件不存在需要创建 mkdir /mnt/cdrom #挂载光驱 mount -t aut ...
- 设置arc/非arc
1,选择项目中的Targets,选中你所要操作的Target,2,选Build Phases,在其中Complie Sources中选择需要ARC的文件双击, 并在输入框中输入:-fobjc- ...
- 17. Word Break && Word Break II
Word Break Given a string s and a dictionary of words dict, determine if s can be segmented into a s ...
- 2016-08-15:从YUV420P中提取指定大小区域
typedef struct { int width; int height; }SizeInfo; typedef struct { int x; int y; int width; int hei ...
- PHP指定字段的多维数组排序方法
PHP数组排序可以用array_multisort方法实现,但是如果是多维数组,并且我们要指定数组中的某个字段进行排序,那么这就需要我们自己写方法实现了. function sortArrByFiel ...
- 【转】你真的理解Python中MRO算法吗?
你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...
- SQL SERVER 2008 字段值合并
/** * 通过 FOR XML PATH 语句,可以将字段的值进行合并. **/ CREATE TABLE tb_child ( name ), hobby ) ) go INSERT INTO t ...
- Asp.net Page指令
Page指令为编译器编译页面时使用的指令 指令的格式为 <%@ [Directive] [Attribute=value]%> <%@ Page Language="C#& ...