ios KVC机制的使用
来源:互联网 发布:360主机卫士 apache 编辑:程序博客网 时间:2024/06/08 08:53
KVC是Key Value Coding的缩写,意思是键值编码。在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象的属性方法。说的有的拗口,实际上就是通过类定义我们可以看到类的各种属性,那么使用属性的名称我们就能访问到类实例化后的对象的这个属性值。
这个方法可以不通过getter/setter方法来访问对象的属性。因为一个类的成员变量如果没有提供getter/setter的话,外界就失去了对这个变量的访问渠道。而KVC则提供了一种访问的方法,这个在某些场合会很有威力。
不多说了,上代码:
- @interface myPerson : NSObject
- {
- NSString *_name;
- int _age;
- int _height;
- int _weight;
- }
- @end
- @interface testViewController : UIViewController
- @property (nonatomic, retain) myPerson *testPerson;
- @end
- - (void)testKVC
- {
- testPerson = [[myPerson alloc] init];
- NSLog(@"testPerson's init height = %@", [testPerson valueForKey:@"height"]);
- [testPerson setValue:[NSNumber numberWithInt:168] forKey:@"height"];
- NSLog(@"testPerson's height = %@", [testPerson valueForKey:@"height"]);
- }
第一段代码是定义了一个myPerson的类,这个类有一个_height的属性,但是没有提供任何getter/setter的访问方法。同时在testViewController这个类里面有一个myPerson的对象指针。
当myPerson实例化后,常规来说是无法访问这个对象的_height属性的,不过通过KVC我们做到了,代码就是testKVC这个函数。
运行之后打印值就是:
2013-11-02 11:16:21.970 test[408:c07] testPerson's init height = 0
2013-11-02 11:16:21.971 test[408:c07] testPerson's height = 168
这就说明确实读写了_height属性。
KVC的常用方法:
- - (id)valueForKey:(NSString *)key;
- - (void)setValue:(id)value forKey:(NSString *)key;
这里有几个要强调一下
1. key的值必须正确,如果拼写错误,会出现异常
2. 当key的值是没有定义的,valueForUndefinedKey:这个方法会被调用,如果你自己写了这个方法,key的值出错就会调用到这里来
3. 因为类key反复嵌套,所以有个keyPath的概念,keyPath就是用.号来把一个一个key链接起来,这样就可以根据这个路径访问下去
4. NSArray/NSSet等都支持KVC
- ios KVC机制的使用
- ios使用kvc机制简化对json的解析
- ios之KVC机制的使用/ KVO机制使用的概述
- ios KVC KVO的使用
- IOS KVC的详细使用
- iOS KVC setValuesForKeysWithDictionary的使用
- IOS KVC 机制
- ios:KVC的概述与使用
- ios:KVC的概述与使用
- IOS开发之----KVC的使用
- iOS:KVO/KVC 的概述与使用
- ios:KVC的概述与使用
- iOS 中KVO和KVC的使用
- iOS:KVO/KVC 的概述与使用
- ios:KVC的概述与使用
- 【iOS】KVC 和 KVO 的使用场景
- 【iOS】KVC 和 KVO 的使用场景
- ios:KVC的概述与使用
- mini210开发板H43电阻屏驱动程序
- 求职信教程大全——10篇文章让你写出优秀的求职信
- static
- xcode修改product name
- 如何使用唯物主义辩证法
- ios KVC机制的使用
- Eclipse中如何修改SVN的地址
- Log4j标准配置
- winpcap局域网抓包工具http
- oc中initialize与init的区别
- MongoDB中级---->关联多表查询
- Android Disable NumberPicker的编辑功能
- Linux SPI总线和设备驱动架构之一:系统概述
- C++带参数默认值的函数