OC中的KVC
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC中的KVC相关的知识,希望对你有一定的参考价值。
看官们,我们在前面章回中介绍了Foundation框架中的日期操作,本章回中将介绍OC中的KVC。
我们说的KVC是Key Value Codeing的缩写,它是OC中操作类属性的一种方式,它是在NSObject中实现的,通常情况下我们定义的类只需要继承NSObject类就可以通过KVC来操作类的属性。如果想了解更加详细的知识,可以在官方文档中搜索NSKeyValueCoding相关的内容。
KVC对类中属性的操作主要有两种,下面是具体的操作以及实现该操作时需要使用的方法
1.修改类中的属性值
- (void)setValue:(id)value forKey:(NSString *)key;
注意参数value是类类型,不管属性是int等基本类型还是类类型,都需要使用类类型的对象给属性赋值;
2.获取类中的属性值
- (id)valueForKey:(NSString *)key;
注意方法的返回值是类类型,不管属性是int等基本类型还是类类型,通过该方法获取到属性值都是类类型;
其实我们使用setter和getter方法也可以操作属性,OC提供KVC这种方式操作属性只是显得更加灵活方便一些,不过性能比较低,因为它是间接调用setter/getter方法来操作属性的。
使用KVC时要注意key需要与类中的属性名保持一致,如果不一致会在运行时发生异常:NSUnknownKeyException。这点需要注意,因为编译时没有报错,但是运行时却出错了。
接下来我们通过具体的代码来演示如何使用KVC
#include<Foundation/Foundation.h>
//定义一个名叫Person的类并且实现该类
@interface Person : NSObject
@property NSString *name;
@property int age;
-(void) print;
@end
@implementation Person
@synthesize name;
@synthesize age;
-(void) print
NSLog(@"Person name: %@, age: %d",name,age);
@end
int main()
Person * p1 = [[Person alloc] init];
Person * p2 = [[Person alloc] init];
//通过setter方法给类的属性赋值,通过getter方法获取类的属性值
[p1 setName:@"ZhangSan"];
[p1 setAge:26];
[p1 print];
NSLog(@"p1: name: %@, age: %d",[p1 name],[p1 age]);
//通过KVC方法给类的属性赋值,并且获取类的属性值
[p2 setValue:@"LiSi" forKey:@"name"];
[p2 setValue:@"LiSi" forKey:@"aname"];
[p2 setValue:[NSNumber numberWithInt:33] forKey:@"age"];
[p2 print];
NSLog(@"p2: name: %@, age: %@",[p2 valueForKey:@"name"],[p2 valueForKey:@"age"]);
在代码中我们添加了相关的注释,以方便大家理解代码。程序中的内容不是很多,因此就不列出程序运行结果了。
最后我们对本章回的内容做一个总结:
- 1.只需要继承NSObject就可能实现KVC;
- 2.KVC使用比较灵活,但是性能相对比较低;
- 3.如果属性值错误(没有与key匹配的属性)编译正常,但是会有运行时异常;
看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!
以上是关于OC中的KVC的主要内容,如果未能解决你的问题,请参考以下文章