objective-c中的:KVC-键值编码
来源:互联网 发布:数据库百科全书 编辑:程序博客网 时间:2024/06/07 12:38
转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7374986
在oc中,可以使用KVC来访问变量的属性,即使该属性没有get,set方法也可以调用,方便灵活,另外还可以方便的管理集合,具体使用我们先看代码:
#import <Foundation/Foundation.h>@interface Human:NSObject{ NSString *name; int age; Human *child;}//注意下面并没有写age的property@property (copy) NSString *name;@property (retain)Human *child;@end@implementation Human@synthesize name;@synthesize child;@endint main(int argc, const char * argv[]){ @autoreleasepool { Human *human = [[Human alloc]init]; Human *child=[[Human alloc]init]; [human setValue:@"holydancer" forKey:@"name"];//将name属性设置为"holydancer" NSString *nameOfHuman=[human valueForKey:@"name"];//将human中的name属性取出 NSLog(@"%@",nameOfHuman); [human setValue:[NSNumber numberWithInt:20] forKey:@"age"];//将没有set方法的age属性赋值 NSLog(@"%@",[human valueForKey:@"age"]);//将没有get方法的age值取出。 [human setValue:child forKey:@"child"];//等价于human.child=child; //将human中的属性child的name属性设置为"dancer's child" [human setValue:@"dancer's child" forKeyPath:@"child.name"]; //这里的方法名叫setValue:forKeyPath,可以用来设置当前对象属性的属性。 //将human中的属性child的age属性取出。 NSLog(@"%@",[human valueForKeyPath:@"child.name"]); } return 0;}
2012-03-20 19:58:30.634 kvc[3197:403] holydancer
2012-03-20 19:58:30.637 kvc[3197:403] 20
2012-03-20 19:58:30.638 kvc[3197:403] dancer's child
如上所示,例用键值编码可以很轻松地操作对象的属性和对象属性的属性。需要注意的是,因为KVC是cocoa的特性,所以在键值设置或者获取时,键统一是字符串,而值是不支持基本数据类型的,所以如上所示,我们需要将age包装成NSNumber类型,另外在输出age时,即使我们知道是int型,但取出时是按NSNumber操作的,输出占位符仍是%@.
下面我们来看看KVC的另一种简单用法,添加运算符:
- #import <Foundation/Foundation.h>
- @interface Human:NSObject
- {
- NSString *name;
- int age;
- NSMutableArray *children;
- }
- //注意下面并没有写age的property
- @property (copy) NSString *name;
- @property (retain)Human *child;
- @end
- @implementation Human
- @synthesize name;
- @synthesize child;
- @end
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- Human *human = [[Human alloc]init];
- Human *child1=[[Human alloc]init];
- Human *child2=[[Human alloc]init];
- [child1 setValue:[NSNumber numberWithInt:5] forKey:@"age"];
- [child2 setValue:[NSNumber numberWithInt:10] forKey:@"age"];//给两个child的age属性赋值,因为没有property,所以用KVC模式赋值
- NSMutableArray *children =[[NSMutableArray alloc]init];
- [children addObject:child1];
- [children addObject:child2];
- //上面是为了将两个Human类包装为NSArray,准备放入human类
- [human setValue:children forKey:@"children"];
- NSNumber *count=[human valueForKeyPath:@"children.@count"];//利用键路径计算human对象中children属性包含的元素个数
- NSNumber *sumOfAge=[human valueForKeyPath:@"children.@sum.age"];//计算children中所有对象的年龄和
- NSNumber *maxOfAge=[human valueForKeyPath:@"children.@max.age"];//计算children中所有对象年龄最大的
- NSNumber *minOfAge=[human valueForKeyPath:@"children.@min.age"];//计算children中所有对象年龄最小的
- NSNumber *avgOfAge=[human valueForKeyPath:@"children.@avg.age"];//计算children中所有对象年龄的平均数
- //@是运算符的
- NSLog(@"children中有%@个元素,年龄和为%@,最大年龄为%@,最小年龄为%@,平均年龄为%@",count,sumOfAge,maxOfAge,minOfAge,avgOfAge);
- }
- return 0;
- }
2012-03-20 19:48:23.574 kvc[2996:403] children中有2个元素,年龄和为15,最大年龄为10,最小年龄为5,平均年龄为7.5
关键字:objective-c ,objective c, oc ,键值编码,KVC ,valueForKey ,valueForKeyPath
- objective-c中的:KVC-键值编码
- objective-c中的cocoa特性:KVC-键值编码(十三)
- objective-c中的cocoa特性:KVC-键值编码
- Objective-C之KVC(键值编码)
- Objective-C 【KVC(键值编码)】
- Objective-C学习-KVC(键值编码)和KVO(键值观察)
- Objective-C之KVC(键值编码)详解
- Objective-C中的KVC
- 【Objective-C】OC中键值编码(KVC)的概念和使用方法
- 【Objective-C】OC中键值编码(KVC的概念和使用方法
- Objective-C(十七、KVC键值编码及实例说明)——iOS开发基础
- 【Objective-C】OC中键值编码(KVC)的概念和使用方法
- Objective-C ---强大的KVC(key valued coding 键值编码) 详解
- 初识Objecive-C 之 键值编码(KVC)
- obj-c编程16:键值编码(KVC)
- Objective-c中的KVC、KVO
- OC-KVC-键值编码
- KVC-键值编码
- Web应用界面设计精彩案例分享
- 迈出从3K到1W的重要一步——掌握设计模式
- oracle日期相减
- Oracle游标的概要
- spring的事务管理的原理(如何设置在Action或者在Service层进行事务拦截及其回滚)
- objective-c中的:KVC-键值编码
- Hibernate的缓存的原理(关联的数据查询出来如何缓存的)
- java处理文件类
- c++ 类中常量成员,和引用成员初始化
- Linux ALSA声卡驱动之二:声卡的创建
- 8月新作1
- 8月新作2
- 字节序
- 8月新作3