iOS 中KVC、KVO菜鸟都能懂的教程

1、KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。(关键点:访问对象的属性!)

例子:

//定义一个Person类  有两个属性name 和 age

@interface Person : NSObject

{

NSString*_name;

int      _age;

} @end

//定义一个viewController 用来测试(如果你已经学到UI阶段就用viewController,如果没学到就在main函数里面实现)

#import “Person.h”

@interface ViewController :UIViewController

@property (nonatomic, retain) Person* testPerson;

@end

– (void)viewDidLoad {

      [superviewDidLoad];

//创建Person对象

      testPerson = [[myPerson alloc] init];

//设置age属性的值

      [testPerson setValue:[NSNumber  numberWithInt:18]  forKey:@”age”];  

//获取age的值

      NSLog(@”testPerson‘s age = %@”,      [testPerson valueForKey:@”age”]);

}

就这两个方法:

 – (id)valueForKey:(NSString *)key;          

-(void)setValue:(id)value forKey:(NSString *)key;

key是要设置的age属性,value 是age的值

2、KVO的是KeyValue Observe的缩写,中文是键值观察。这是一个典型的观察者模式,观察者在键值改变时会得到通知。


设置就3步:

1.注册需要观察的对象的属性addObserver:forKeyPath:options:context:(一般添加self为观察者)

2.实现observeValueForKeyPath:ofObject:change:context:方法,这个方法当观察的属性变化时会自动调用(这是一个回调方法)

3.取消注册观察removeObserver:forKeyPath:context:(在dealloc里面写)

例子:

//定义一个Person类  有两个属性name 和 age

@interface Person : NSObject

{

NSString*_name;

int      _age;

} @end

//定义一个viewController 用来测试

#import “Person.h”

@interface ViewController :UIViewController

@property (nonatomic, retain) Person* testPerson;

@end

– (void)viewDidLoad {

[superviewDidLoad];

//创建Person对象

testPerson = [[myPerson alloc] init];

//第一步:添加观察者self

[testPerson addObserver:self forKeyPath:@”age” options:NSKeyValueObservingOptionNew    context:nil]; 

}

//第二步 添加回调方法  当要观察的值发生变化时 进行自己想要的操作

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

{

if ([keyPath isEqualToString:@”age”]) {

NSLog(@”new Age =%@”, [change valueForKey:NSKeyValueChangeNewKey]);

}

//第三步移除观察者

– (void)dealloc

{

[testPerson removeObserver:self forKeyPath:@”age” context:nil];

[super dealloc];

}

感谢码迷的文章

    原文作者:abios
    原文地址: https://www.jianshu.com/p/9325ef461679
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞