一、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