KVC(forKey,forKeyPath)
- KVC是Cocoa一个大招,非常牛逼。
- 利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改)
如:Person.m文件中:
@implementation Person
{
@private
double _height;
}
- (void)printHeight
{
NSLog(@"height是%f", _height);
}
Person.h中:
- (void)printHeight;看我们如何修改这个height的值:
void test()
{
Person *p = [[Person alloc] init];
[p setValue:@10.5 forKey:@"height"];
[p printHeight];
就这样就能更改了这个height的值。
forKeyPath中可以利用.运算符, 就可以一层一层往下查找对象的属性
当然 在一般的修改一个对象的属性的时候,forKey和forKeyPath,没什么区别。如:
[p setValue:@"jack" forKey:@"name"];
[p setValue:@"jack" forKeyPath:@"_name"];
一样能修改这个name和age的值。
- 看一下若是层次结构深一点的。比如person 有dog;dog有bone
这个是dog的属性:
@class Bone;
@interface Dog : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) Bone *bone;
这个是bone的属性:
@interface Bone : NSObject
@property (nonatomic, strong) NSString *type;
我们先初始化这些对象:
Person *p = [[Person alloc] init];
p.dog = [[Dog alloc] init];
然后接下来我们给这个bone赋值:
p.dog.bone.type = @"狗骨";
[p setValue:@"猪骨" forKeyPath:@"dog.bone.type"];
[p.dog setValue:@"猪骨" forKeyPath:@"bone.type"];
- 从这里我们可以看出,这个forKeyPath的厉害,能使用点语法,深层次的去寻找我们需要的属性
- 我们看一下取值的时候,forKeyPath:
void test()
{
Person *p = [[Person alloc] init];
p.dog = [[Dog alloc] init];
p.dog.bone = [[Bone alloc] init];
- 获得数组中的每一个元素的某个属性值
比如person有很多书:
Person *p = [[Person alloc] init];
Book *book1 = [[Book alloc] init];
book1.name = @"ios之Ui布局";
book1.price = 10.5;
Book *book2 = [[Book alloc] init];
book2.name = @"ios之OC基础";
book2.price = 18.5;
Book *book3 = [[Book alloc] init];
book3.name = @"ios之多线程";
book3.price = 20.5;
Book *book4 = [[Book alloc] init];
book4.name = @"ios之内存管理";
book4.price = 10.5;
然后我们取出books数组中每一个元素的name属性值,放到一个新的数组中返回
NSArray *names = [p valueForKeyPath:@"books.name"];这样就能办到。
还有一个比较牛逼的 是取得一些特殊的值,如:avg、sum
NSNumber *avgNumber = [p valueForKeyPath:@"books.@avg.price"];
KVC(forKey,forKeyPath)的更多相关文章
- 使用KVC
KVC是Key Value Coding的简称,意思是键值编码,号称Cocoa的大招.它是一种可以直接通过字符串key(对象在名称)来访问或修改对象属性的机制. 使用 1.利用KVC可以随意修改一个对 ...
- IOS开发之KVC与KVO简述
KVC:Key-Value Coding KVO:Key-Value Observing Person.m #import <Foundation/Foundation.h> @inter ...
- iOS:KVO/KVC 的概述与使用
iOS:KVO/KVC 的概述与使用 KVO APP开发技术QQ群:347072638 一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性 ...
- iOS KVO & KVC
键值观察:值更改时通知观察者 键值观察(Key-value observing,或简称 KVO)允许对象观察另一个对象的属性.该属性值改变时,会通知观察对象.它了解新值以及旧值:如果观察的属性为对多的 ...
- iOS编程——Objective-C KVO/KVC机制[转]
这两天在看和这个相关的的内容,全部推翻重写一个版本,这是公司内做技术分享的文档总结,对结构.条理做了更清晰的调整.先找了段代码,理解下,网上看到最多的一段的关于KVC的代码 先上代码 1. 1 ...
- KVC与KVO的不同
vc 就是一种通过字符串去间接操作对象属性的机制, 访问一个对象属性我们可以 person.age 也可以通过kvc的方式 [person valueForKey:@"age&quo ...
- IOS开发之KVC KVO KVB
KVC(Key Value Coding) KVO(Key Value Observing) KVB(Key Value Binding) KVO是Cocoa的一个重要机制,他提供了观察某一属性变化的 ...
- iOS编程——Objective-C KVO/KVC机制
来源:http://blog.sina.com.cn/s/blog_b0c59541010151s0.html 这两天在看和这个相关的的内容,全部推翻重写一个版本,这是公司内做技术分享的文档总结,对结 ...
- 从[id setValue: forKey:]了解KVC
<Objective-C基础教程> P224页有详细介绍 下边是apple官网的简单介绍 和一个应用的例子. KVC就是Key-value coding,大意是允许通过一个Key来读写一个 ...
随机推荐
- [leetcode] 101. Symmetric Tree 对称树
题目大意 #!/usr/bin/env python # coding=utf-8 # Date: 2018-08-30 """ https://leetcode.com ...
- iOS-----线程同步与线程通信
线程同步与线程通信 多线程是有趣的事情,它很容易突然出现”错误情况”,这是由于系统的线程调度具有一定的随机性造成的.不过,即使程序偶然出现问题,那么是由于编程不当所引起的.当使用多个线程来访问同一个数 ...
- ubuntu修改分辨率
ubuntu分辨率真是坑爹,不知什么原因,ubuntu分辨率一下子变了,通过,显示->分辨率,都改不过来... 无奈,有重装系统的冲动,从网上找了很多方法,都不管用,有一次,在这里 sudo g ...
- android如何改变应用程序安装后显示的图标
修改 res目录下所有ic_launcher.png 为你想显示的图标
- jdbc-DAO的实现
什么是 DAO DAO(Data Access Object)是一个数据访问接口,夹在业务逻辑与数据库资源中间. 在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有 ...
- Linux function: unshare
When a new process is created with the clone() system call, a set of flags is provided which tells t ...
- 善待Erlang 代码 -- Xref 实践
Xref 是一个交叉引用工具,通过分析定义的函数间的调用关系,用于查找函数. 模块. 应用程序和版本之间的依赖关系. 通俗而言,Xref 可以检查代码中函数的调用关系.比如在 moduleA 中的 f ...
- C#两个日期范围内的间隔
http://www.cnblogs.com/love_study/archive/2011/04/02/2003045.html 引用地址 1 /// <summary> /// 计算日 ...
- Chrome经常新标签页打开http://destyy.com/qNHR3u
经常新标签页打开http://destyy.com/qNHR3u网址. 在历史记录里查询 chrome://history/?q=destyy.com ,发现最早访问是25日10点34分05.貌似那个 ...
- PMON和SMON的功能
PMON:进程监控进程进程负责在反常中断的连接之后的清理工作.例如,如果因某些原因专用服务“故障”或被kill掉,PMON就是负责处理(恢复或回滚工作)和释放你的资源.PMON将发出未提交工作的回滚, ...