KVO和KVC理解

 一、KVO(Key-Value-Observing)

键值观察者模式,说白了就是当你监听的值发生变化时,会收到对应的通知。


一般分为三步:

注册监听

使用方法:

1.添加KVO监听者

**@paramobserver 观察者(监听器)

*@paramkeyPath  属性名(要观察的属性)

*@paramoptions

*@paramcontext  传递的参数*/

- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void*)context;

例子:

//为对象p添加一个观察者(监听器)[p addObserver: self  forKeyPath:@"name" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:@"test"];

2.设置监听事件

/** *  当利用KVO监听到某个对象的属性值发生了改变,就会自动调用这个

 * *@paramkeyPath 哪个属性被改了 

*@paramobject  哪个对象的属性被改了 

*@paramchange  改成咋样

 *@paramcontext 当初addObserver时的context参数值 */

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

 NSLog(@"%@ %@ %@ %@", object, keyPath, change, context);

}

3.取消监听

//释放KVO监听

-(void)dealloc{    

[p removeObserver: self forKeyPath:@"test"];

}


二、KVC(Key-Value-Coding)

键值编码模式,说白了就是通过指定的key获得想要的值value,而不是通过调用Setter、Getter方法访问。


1 .访问私有变量

一个类中的私有变量,不能直接通过Setter、Getter方法访问。但是却可以通过KVC来访问。

2. 使用KVC直接访问 NSArray 或者 NSSet 的属性值

3. 使用KVC将字典(json)转化成模型


注意:

(1). key的值必须正确,如果拼写错误,会出现异常

(2). 当key的值是没有定义的,valueForUndefinedKey:这个方法会被调用,如果你自己写了这个方法,key的值出错就会调用到这里来

(3). 因为类key反复嵌套,所以有个keyPath的概念,keyPath就是用.号来把一个一个key链接起来,这样就可以根据这个路径访问下去

(4). NSArray/NSSet等都支持KVC

你可能感兴趣的:(KVO和KVC理解)