您的位置:首页 > 其它

键值监听---KVO

2016-05-10 14:50 267 查看
KVO机制由NSKeyValueObserving协议提供支持,NSObject遵守该协议,因此NSObject的子类都可以使用该协议中的方法,所有Object-c类都是NSObject的子类。。

该协议包含了如下方法用以注册监听器:

addObserver:forKeyPath:option:context:-------注册一个监听器用以监听指定的key路径,

removeObserver:forKeyPath-----为key路径删除指定的监听器

removeObserver:forKeyPath:context------为key路径删除指定的监听器

使用----通过视图组件监听数据模型的变化,当数据模型组件的key路径对应的属性值发生变化时,作为监听器的视图组件就会被激发,激发时就会回调监听器本身的监听方法=:

observerValueForKeyPath:ofOBject:change:context:

步骤如下:为被监听对象注册监听器;重写监听器的observeValueForKeyPath:ofObject:change:context:

简单实用案例:

#import <Foundation/Foundation.h>

#import "Item.h"

@interface ItemView:NSobject

@property (nonatomic,weak) Item* item;

-(void) showItemInfo;

@end

#import "ItemView.h"

@implementtation ItemView

-(void) showItemInfo(){

}

//重写setItem方法

-(void) setItem:(Item*) item{

self->_item=item;

//添加监听

[self.item addObserver:self forKeyPath:@"name"options:NSKeyValuesObservingOptionNewcontext:nil];

[self.item addObserver:self forKeyPath:@"price"options:NSKeyValueObservingOptionNewcontext;nil];

}

//监听的回调方法

-(void)observeValuesForKeyPath:(NSString*)keyPathofObject:(id)object change:(NSDictionary*)changecontext;(void*)context{

NSLog(@"修改的keypath%@",keyPath);

NSLog(@"修改的对象%@",object);

}

//删除监听器

-(void)dealloc{

[self.item removeObserver:self forKeyPath:@"name"];

[self.item removeObserver:self forKeyPath:@"price"];

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: