键值监听---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
该协议包含了如下方法用以注册监听器:
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
相关文章推荐
- 大型网站技术架构 读书笔记2 大型网站核心架构要素
- java内存模型
- C语言课程设计第三节课作业刘子威
- 大型网站技术架构 读书笔记2 大型网站核心架构要素
- split
- Android 手动显示和隐藏软键盘
- UITextView
- 关于C++和Objective-C混编
- 深入分析 Java 中的中文编码问题
- THINKPHP添加不能为空
- 左值、右值与右值引用 & C++11中
- FancyListIndexer 的使用----字母筛选器,使用贝塞尔曲线实现。
- 表格标签和表格布局
- Android中的广播Broadcast详解
- CSS清楚浮动float
- 【JS 设计模式 】门面模式之DOM元素绑定事件
- DOM解析XML文件
- 字符串复制char *strcpy(char* dest, const char *src);
- [css]水平垂直居中的方法
- 表格标签和表格布局