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 ...
随机推荐
- Json操作(DynamicJson)
Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...
- 伪静态URLRewrite学习笔记
UrlRewrite: UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址,类似于Apache的mod_rewrite.将我们的动态网页地址转化为静态的地址,如ht ...
- linux文件权限表示及用户权限管理
UNIX/Linux下关于文件执行权限的表示和查看想必是最熟悉不过的,然而你是否真正了解用户文件的权限标识和用户的权限呢? 实际上文件权限标识不仅仅只有U, G, O 11 10 9 8 7 6 5 ...
- <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 的说明
X-UA-Compatible是针对ie8新加的一个设置,对于ie8之外的浏览器是不识别的,这个区别与 content="IE=7"在无论页面是否包含<!DOCTYPE> ...
- json格式的时间转换
//yyyy-MM-dd HH:mm:SS function JsonDateToDate(jsondate) { var date = new Date(parseInt(jsondate.repl ...
- namke 命令行编译
简介 大家已经习惯于微软提供的功能强大的IDE,已经很少考虑手动编连项目了,所谓技多不压身,有空的时候还是随我一块了解一下命令行编译. C/C++/VC++程序员或有Unix/Linux编程经验应该很 ...
- 借助取色工具ColorPix对Pycharm编辑器设定自己喜欢的代码颜色_20161202
1.Pycharm编辑器怎么设定自己喜欢的颜色,前几天看爬虫博客,看博主贴出的代码颜色很是喜欢,如下图,设置了好多次找不到他设定的颜色. 2.下班回家想起来之前做表的时候用到过一个取色工具ColorP ...
- mysql 不允许连接
错误提示: ERROR 1130: Host '192.168.1.1' is not allowed to connect to this MySQL server的解决方法: 1.改表法.可能是你 ...
- asp.net下载文件方法
/// <summary> /// 下载 /// </summary> /// <param name="url"></param> ...
- eclipse颜色 字体
字体 之前也想过搜个字体,但是看了别人的推荐也没什么太大感觉.今天我自己选择了一款字体,发现看着单词中的i等瘦型的字母会比较费力,现在我知道自己想要什么样的字体了.网上推荐Inconsolata.pf ...