KVO的简单使用
2015-09-12 14:34
246 查看
一、KVO:(Key-Value-Observer)键值观察者,是观察者设计模式的⼀种具体实现。
触发机制:⼀个对象(观察者),监测另⼀对象(被观察者)的某属性是否发⽣变 化,若被监测的属性发⽣的更改,会触发观察者的⼀个⽅法(⽅法名固定,类似代理⽅法)
使⽤步骤: 1、注册观察者(为被观察者指定观察者以及被观察属性) 2、实现回调⽅法 3、触发回调⽅法(被观察属性发⽣更改) 4、移除观察者
二、使用细解
拿自建的一个Person类来说
Person *person = [[Person alloc] init];
[person addObserver:self forKeyPath:@"person.name" options:( NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) context:nil];
四个参数:
observer :观察者
keyPath :观察哪个属性
options :观察属性的状态,新旧值还是初始值
context :上下文,用来传值的,如果不需要传值,可置为nil
下面的方法是添加了观察者,属性发生变化时自己调用的方法,不能手动调用。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"%@ %@ %@ %@", keyPath, object, change, context);
// 移除观察者
[object removeObserver:self forKeyPath:keyPath context:context];
}
参数含义:
keyPath 所观察的属性
object 别观察者
change 一个字典,内部包含了属性不同状态下的值
context 上下文,从外界传数据过来
触发机制:⼀个对象(观察者),监测另⼀对象(被观察者)的某属性是否发⽣变 化,若被监测的属性发⽣的更改,会触发观察者的⼀个⽅法(⽅法名固定,类似代理⽅法)
使⽤步骤: 1、注册观察者(为被观察者指定观察者以及被观察属性) 2、实现回调⽅法 3、触发回调⽅法(被观察属性发⽣更改) 4、移除观察者
二、使用细解
拿自建的一个Person类来说
Person *person = [[Person alloc] init];
[person addObserver:self forKeyPath:@"person.name" options:( NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew) context:nil];
四个参数:
observer :观察者
keyPath :观察哪个属性
options :观察属性的状态,新旧值还是初始值
context :上下文,用来传值的,如果不需要传值,可置为nil
下面的方法是添加了观察者,属性发生变化时自己调用的方法,不能手动调用。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"%@ %@ %@ %@", keyPath, object, change, context);
// 移除观察者
[object removeObserver:self forKeyPath:keyPath context:context];
}
参数含义:
keyPath 所观察的属性
object 别观察者
change 一个字典,内部包含了属性不同状态下的值
context 上下文,从外界传数据过来
相关文章推荐
- 个人学习笔记---linux原子操作的实现原理
- SQL语句统计每天、每月、每年的 数据
- 开始总结式学习
- Linux下彻底卸载mysql数据库
- 汇编移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR 汇编移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR
- 安装完成后如何找回SQL Server实例安装时的序列号
- What does Java differ from c/c++?
- Remove Element
- 数据库一对一,一对多,多对多关系
- shell基础之一:变量、变量运算及条件测试
- 【Leetcode】Remove Duplicates from Sorted List in JAVA
- git配置的位置
- Nlog配置
- CSS知识点——可替换元素vs不可替换元素
- 从零开始--CenterOS 6.5 64位环境中搭建nginx1.3+mysql5.5.25+tomcat7+jdk7+MQTT服务器
- Git 使用
- IOS-ScorllView
- javascript 模拟java 实现继承的5种方式
- 20150910 课后练习 RPM YUM
- 线性布局Linerlayout-计算器布局实现