Objective-C的KVC和KVO

KVC- Key-Value Coding.

KVO Key-Value Observing.

 

KVC是Objective-C提供的一种对象属性的访问机制。对于有面向对象编程习惯的程序员,这是别开生面的方式:不需要在源码通过特殊标志符“." 或 "->"来访问属性;KVC只需要在运行时提供属性名/路径名,就能获得某属性的值。

 

范例:

@interface Student : NSObject

{

NSString *name;

}

@end

 

@implementation Student

 

@end

 

///通过Key访问属性name

 

Student * stu=[ [Student alloc] init];

 

[stu setValue:@"Ken Wu" forKey:@"name"];

NSString *newname = [stu valueForKey:@"name"]; //newname的值就是“Ken Wu"。

 

如果是复杂的对象,如以下Student有课程信息,记录其分数。

@interface Course : NSObject

{

NSString *name;

float score;

}

@end

 

@implementation Course

@end

@interface Student : NSObject

{

NSString *name;

Course *course;

}

@end

 

@implementation Student

@end

 

//通过KeyPath访问课程分数

Student * stu=[ [Student alloc] init];

 

[stu setValue:@"Ken Wu" forKey:@"name"];

NSString *newname = [stu valueForKey:@"name"]; //newname的值就是“Ken Wu"。

 

[stu setValue:@"Ken Wu" forKey:@"name"];

Course *course =[ [Course alloc] init];

[stu setValue:course forKey:@"course"];

[stu setValue:@"科目1" forKeyPath:@"course.name"];

[stu setValue: 99.9 forKeyPath:@"course.score"];

 

float score = [stu valueForKeyPath:@"corse.score"]; //score的值就是 99.9

 

以上就是KVC的内容

KVO则在此基础上,对对象属性的变化增加了观察机制。一旦值发生了改变,就会回调已知函数

observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context

范例:

[stu addObserver:self forKeyPath:@"corse.score" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];

 

-(void)

observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context{

If([keyPath isEqualToString:@"corse.score"]){

float newScore = [change objectForKey:@"new"];

float oldScore = [change objectForKey:@"old"];

If(newScore > oldScore){

NSLog(@"You made a progress!");

}

Else {

NSLog(@"You need move luck!");

}

}

}

 

以上就是KVO的内容

转载于:https://www.cnblogs.com/Kenwuqingjian/p/5314454.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值