iOS中 KVO 键值观察者
KVO Key-Value-Obsever 键值观察者
1.首先要有一个观察者,此时被观察者是自己找一个观察者观察自己的key值对应的value值有没有改变,如果改变了就可以做一些响应的操作
创建一个被观察者:
self.person = [[Person alloc]init];
2.给被观察者注册观察者
NSKeyValueObservingOptionNew 当重新给被观察者的key值赋值时,触发监听方法,此时打印的 change 永远都是最新的值 存放的是value值 NSKeyValueObservingOptionOld 当重新给被观察者的key值赋值时,触发监听方法,此时打印的 change 永远都是上一次的旧值 存放的是value值 NSKeyValueObservingOptionInitial 当初始化被观察者对象或者重新给观察者对象赋值的时,此时走监听方法 NSKeyValueObservingOptionPrior 当被观察者的name属性赋值前后都会触发,notificationIsPrior = 1 标识赋值前后触发
第一个参数:注册的观察者对象
第二个参数:要观察的key路径
第三个参数:观察value值的变化情况
[self.person addObserver:self forKeyPath:@"name" options:(NSKeyValueObservingOptionOld) context:nil];
self.person.name = @"guoMeiMei";
监听方法:
触发的时机:一旦观察者发现被观察者的name key值对应的value值发生变化的时候就会自动调用这个方法
一般观察的key值对应的value变化时,我们要做的一些操作都写在这个方法中
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
NSLog(@"%@",keyPath);
NSLog(@"%@",object);
NSLog(@"%@",change);
//一旦key值对应的value改变,就修改value的背景颜色
self.view.backgroundColor = [UIColor colorWithRed:kColorValue green: kColorValue blue: kColorValue alpha: 0.5];
}
Person类:
Person.h
@interface Person : NSObject
@property(nonatomic,copy)NSString *name;//名字
@property(nonatomic,copy)NSString *gender;//性别
@property(nonatomic,assign)NSInteger age;//年龄
@end
Person.m
@implementation Person
- (void)dealloc{
self.name = nil;
self.gender = nil;
[super dealloc];
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{
}
- (NSString *)description{
return [NSString stringWithFormat:@"姓名:%@ 性别:%@ 年龄 %ld",_name,_gender,_age];
}
@end
改变属性值:
- (IBAction)setValue:(UIButton *)sender {
// NSLog(@"改变属性值");
//name属性的新值
self.person.name = @"liangChen";
}
移除观察者:
- (IBAction)removeOberver:(UIButton *)sender {
// NSLog(@"移除观察者");
//观察完成之后要移除观察者,观察者只能被移除一次,第二次就会Crash
[self.person removeObserver:self forKeyPath:@"name"];
}
效果展示:
iOS中 KVO 键值观察者的更多相关文章
- KVO 键值观察者
KVO(键值观察者) //监听的创建 -(id)initChildren:(Person *)person { self = [super init]; if (self != nil) { //拥有 ...
- IOS中KVO模式的解析与应用
IOS中KVO模式的解析与应用 最近老翁在项目中多处用到了KVO,深感这种模式的好处.现总结如下: 一.概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修 ...
- KVO键值监听
KVO 键值监听:当我想知道一个对象的属性是否发生改变的时候 做出响应,就需要添加监听keypath 和 key的区别keypath会自动寻找子类的属性key只会寻找当前类的属性添加键值监听[pers ...
- 使用KVO键值监听
本文章从五个方面介绍KVO(Key-Value-Observer)键值观察者: (1)功能介绍 (2)使用步骤 (3)应用场景 (4)原理理解 (5)相关的面试题 一 功能介绍 KVO是OC语言对「观 ...
- 在C#中用Linq从属性文件中读取键值对Key-Value Pair
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在C#中用Linq从属性文件中读取键值对Key-Value Pair.
- C语言定义从URL中获取键值的接口
环境:centos7下,对客户端http请求进行解析,来获取有效键值(包括汉字). 头文件 /* 这是一份关于从Http请求信息中提取键值的接口声明的头文件 */ #ifndef _HEAD_H_ # ...
- js中以键值对的形式当枚举
js中以键值对的形式当枚举var Penum= { B: "姓名", C: "所属居委", D: "证件号", E: "性别&qu ...
- PHP如何根据数组中的键值进行排序
主要是使用PHP的排序函数,asort()和arsort(). 为了减少代码的耦合性,我们将根据数组中的键值进行排序封装成一个函数 <?php $array = array( array(), ...
- Redis中的键值过期操作
1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...
随机推荐
- svg和css实现波浪动效
效果: 截图有点模糊~ 实现: <svg教程> //html <body> <svg class="wave-container" xmlns=&qu ...
- 58. Length of Last Word(easy, 字符串问题)
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...
- jenkins部署.net平台自动化构建
在引入自动化部署工具的时候,我们对比了jenkins和gitlab CI,jenkins有非常丰富的插件,配置起来方便.gitlab CI更倾向于脚本配置,当然jenkins也可以使用pipeline ...
- Vue nextTick 机制
背景 我们先来看一段Vue的执行代码: export default { data () { return { msg: 0 } }, mounted () { this.msg = 1 this.m ...
- 13.QT-QMainWindow组件使用
QMainWindow介绍 主窗口是与用户进行长时间交互的顶层窗口,比如记事本 主窗口通常是应用程序启动后显示的第一个窗口 QMainWindow是Qt中主窗口的基类,继承于QWidget,如下图所示 ...
- MongoDB 固定集合
MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素! ...
- Antlr v4入门教程和实例
1 重逢ANTLR 最早知道ANTLR是当年学习Apache Derby数据库源码时,在看到SQL解析那一层时,第一次看到编译原理在实际项目中的应用,惊叹之余也只能望而却步.之前也根据网上一些资料尝试 ...
- Android开发艺术探索——第二章:IPC机制(中)
Android开发艺术探索--第二章:IPC机制(中) 好的,我们继续来了解IPC机制,在上篇我们可能就是把理论的知识写完了,然后现在基本上是可以实战了. 一.Android中的IPC方式 本节我们开 ...
- Angular2入坑指南
序 对后端开发来说,前端是神秘的,眼花缭乱的技术,繁多的框架,出名的不出名的好几百种,看是"繁荣",其实显得杂乱无章,但是我们在做开发的时候,技术选型还是主流的那么几个:浅析ang ...
- The Zen Programmer
专注 何为专注 关于 休息 怎么睡觉 心无杂念 我的体会 自我分析 初学者心态 无我 不要设置职业目标 敏事慎言 正念 做自己的老板 玩物养志 结语 最近在研读Christian Grobmeier ...