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匹配的属性)编译正常,但是会有运行时异常;


看官们,本章回的内容就介绍到这里,欲知后事如何且听下回分解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值