holydancer原创,如需转载,请在显要位置注明:
转自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;
- @end
- int 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
相关推荐
7. 键值编码(Key-Value Coding,KVC)与键值观察(Key-Value Observing,KVO):KVC允许通过字符串名称来访问对象的属性,而KVO则是当属性值发生变化时,系统会通知观察者。这两个特性为动态语言交互提供了可能。 ...
1. **Objective-C基础**:Objective-C是C语言的超集,这意味着你可以直接在Objective-C中编写C代码。它引入了Smalltalk的“消息传递”机制,使得对象间的通信更加灵活。了解类、对象、方法、继承、多态和封装这些...
7. **KVC(Key-Value Coding)与KVO(Key-Value Observing)**:学习如何通过键值编码间接访问对象属性,以及通过键值观察监听属性变化。 8. **NSNotifications**:了解事件通知机制,如何发布、接收和移除通知。 ...
- 键值编码(KVC)和键值观察(KVO):这是Objective-C的一个强大特性,允许对象通过字符串键来动态地访问和监视对象属性。 - 其他关键字和概念如NSError, NSOperation, NSSortDescriptor, NSPredicate等,它们都是...
**KVC键值编码详解** 键值编码(Key-Value Coding,简称KVC)是Objective-C中的一个核心特性,它允许程序通过字符串键来访问和修改对象的属性,而无需直接调用setter或getter方法。KVC在Apple的Cocoa和Cocoa Touch...
5. Objective-C的高级特性:包括代理(Delegates)、通知(Notifications)、块(Blocks)和键值编码(KVC)等。 6. 设计模式:在Objective-C编程中,合理地应用设计模式能解决常见的设计问题,书里可能会讨论单例...
- **KVC**:键值编码,用于间接访问对象的属性。 4. **委托(Delegate)模式**: - **定义**:一种设计模式,允许对象之间进行通信。 - **实现**:通过遵循特定协议来指定对象间的交互方式。 5. **GCD(Grand ...
键值编码(KVC)和键值观察(KVO)是Objective-C中用于动态访问对象属性的机制。 目标-动作(Target-Action)是一种设计模式,它在用户界面元素和对象的行为之间提供了一种间接的联系。设计模式是面向对象编程中...
这使得Objective-C能够实现一些高级功能,如类别(Category)、协议(Protocol)和字典的键值编码(Key-Value Coding)。 5. **Foundation框架**:Objective-C的基础库是Foundation框架,它提供了各种基本数据类型...
- ** KVC**:键值编码(Key-Value Coding),提供了一种间接访问对象属性的方式,可以通过字符串来获取或设置对象的属性值。 - **数据绑定**:KVO和KVC都是Objective-C中实现数据绑定的重要技术。 #### 题目120:...
**类结构**:Objective-C中的类主要包括三个部分: - **类的元数据**:用于存储类的信息,如类的名字、父类的名字等。 - **类的方法列表**:包含类实现的方法信息。 - **缓存区**:用于快速查找方法的实现。 **...
02-ObjectiveC.pdf深入讲解Objective-C语言,这是Cocoa开发的核心。它包含了Objective-C的面向对象特性,如类、对象、继承、协议和方法,以及消息传递机制。此外,还可能涵盖了 Blocks、Category 和动态类型等高级...
4. **KVC(Key-Value Coding)与KVO(Key-Value Observing)**:Cocoa提供了键值编码和键值观察机制,使得动态访问对象属性和监听属性变化变得简单。KVC允许通过键来间接访问对象属性,而KVO则能自动通知观察者属性...
- **NSInteger**:Objective-C中的整型别名,用于提高代码兼容性和可读性。 ### 19. 枚举与结构体 - **枚举**:一组命名的常量集合。 - **结构体**:包含多个成员的复合数据类型。 ### 20. 类别与扩展 - **...
- **KVC(键值编码)**和**KVO(键值观察)**是Objective-C中用于访问和观察对象属性的技术。 #### 26. 多线程 - 在iOS应用开发中,多线程是提高应用性能的关键技术之一。 #### 27. Unix环境 - iOS和macOS都是...