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
相关推荐
Cocoa and Objective-C Cocoa and Objective-CCocoa and Objective-C Cocoa and Objective-C
开发MacOS(OSX)上App的书籍资料
Objective-C for Absolute Beginners will teach you how to write software for your Mac, iPhone,or iPad using Objective-C, an elegant and powerful language with a rich set of developer tools. Using a ...
Amazon超级畅销书,好评如潮,全面解读Objective-C语言及Cocoa特性,用最通俗的语言阐释深奥的知识。 Objective-C是扩展C的面向对象编程语言,也是iPhone开发用到的主要语言。 本书结合理论知识与示例程序,全面...
本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中的框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。...
Cocoa多线程开发Objective-C详解 多线程 Objective-C iOS cocoa Xcode
Objective-C的语法与Cocoa框架.pdf,挺不错的教程
书中应用GoF的经典设计模式,介绍了如何在代码中应用创建型模式、结构型模式和行为模式,如何设计模式以巩固应用程序,并通过设计模式实例介绍MVC在CocoaTouch框架中的工作方式。 《Objective-C编程之道:iOS设计模式...
Cocoa编程经典的入门书籍,图文讲解,易于学习
《Objective-C基础教程》结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中的框架,以及继承、复合、源文件组织等众多重要的...
书中应用GoF的经典设计模式,介绍了如何在代码中应用创建型模式、结构型模式和行为模式,如何设计模式以巩固应用程序,并通过设计模式实例介绍MVC在CocoaTouch框架中的工作方式。 《Objective-C编程之道:iOS设计...
《Objective-C基础教程》全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例介绍了Cocoa工具包的优秀特性和其中的框架,以及继承、复合、源文件组织、内存管理、对象初始化和类别创建等...
权威解读Objective-C和Cocoa特性.全面涵盖最新技术和新增工具.iPhone、iPad、Mac开发必备.Objective-C是一门面向对象、通用、高级、强大的编程语言。它有着优雅的编程环境,并发扬了C语言的优秀特性,是苹果的iOS和...
Using Swift With Cocoa and Objective-C中文版,OC和Swift混合使用
you learn Objective- C in this book, you’ll be ready to dive into Cocoa with a full- blown project or another book such as Learn Cocoa on the Mac or Begin- ning iPhone Development, both by Dave Mark...
本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中的框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。...
iOS 7 Programming Fundamentals: Objective-C, Xcode, and Cocoa Basics by Matt Neuburg (Author) Publisher: O’Reilly Media (October 2013) Language: English ISBN-10: 1491945575 ISBN-13: 978-...
人民邮电出版社《Objective-C基础教程》(含源代码) 影印版的PDF文件+原书附带的代码,特别适合学习iPhone,iPad入门开发学习~
iOS 和 macOS 性能优化书。iOS and macOS Performance Tuning Cocoa, Cocoa Touch, Objective-C, and Swift
Using Swift with Cocoa and Objective-C (Swift 4) EN.epub 去除 DRM