iOS设计模式之KVO Key-Value Observing 键值观察者模式的简单实用和介绍

它提供一种机制,当指定的对象的属性被修改后,则监听者就会接受到通知。

就好像我们给手机定了一个闹钟,等到了制定的时间,闹钟就会响起,我们就会知道时间到了

这个过程中,我们就是监听者,闹钟就是被监听的对象

我们创建一个student类,使用KVO模式,给其中的username 属性添加监听者(观察者

XSStudent
*su = [[XSStudentalloc]
init];

su.name
=
@"zhangsan";

su.age
= 12;

//Observer
观察者是谁

//KeyPath监听的属性,比如监听学生的name属性

//options :监听的内容

//
NSKeyValueObservingOptionNew,NSKeyValueObservingOptionOld这两个参数的意思是监听它的新值和旧值

[su
addObserver:self forKeyPath:@"name"options:
NSKeyValueObservingOptionNew|

NSKeyValueObservingOptionOld context:nil];

//修改属性,触发方法

su.name
=
@"lis";

//观察者观察到有值发生改变的时候发生的方法

- (void)observeValueForKeyPath:(NSString
*)keyPath ofObject:(id)object change:(NSDictionary
*)change context:(void
*)context

{

//change 
字典中的old  new 
是关键字,专门用来存储新值和老值

NSLog(@"oldname %@",[change
objectForKey:@"old"]);

NSLog(@"new %@",[change
objectForKey:@"new"]);

}

注意,这里(NSString
*)keyPath 传过来的就是你添加观察者的时候创建的key  ,如果想要监听多个属性,你可以根据整个值来判断到底是哪个值的变化触发了该方法

时间: 2024-11-05 14:22:52

iOS设计模式之KVO Key-Value Observing 键值观察者模式的简单实用和介绍的相关文章

KVO(Key Value Observing),是观察者模式在Foundation中的实现。

KVO的原理 简而言之就是: 1.当一个object有观察者时,动态创建这个object的类的子类 2.对于每个被观察的property,重写其set方法 3.在重写的set方法中调用- willChangeValueForKey:和- didChangeValueForKey:通知观察者 4.当一个property没有观察者时,删除重写的方法 5.当没有observer观察任何一个property时,删除动态创建的子类 空说无凭,简单验证下. @interface Sark : NSObjec

xcode KVC:Key Value Coding 键值编码

赋值 // 能修改私有成员变量 - (void)setValue:(id)value forKey:(NSString *)key; - (void)setValue:(id)value forKeyPath:(NSString *)keyPath; - (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues; 取值 // 能取得私有成员变量的值 - (id)valueForKey:(NSString *)key; - (

深度理解Key-Value Observing 键值观察

前言   在上一阶段的开发过程中,我们大量使用了 KVO 机制,来确保页面信息的及时同步.也因此碰到了很多问题,促使我们去进一步学习 KVO 的相关机制,再到寻找更好的解决方案.鉴于 KVO 让人欲仙欲死的使用经历,在这里做一个简单分享.此分享的目的,更多的是在于点出 KVO 相关的技术点,供我们大家在学习和使用过程中做一个参考. 对于 KVO 的背后机制感兴趣的同学,可以直接看第三部分,KVC 和 isa-swizzling . 对于 替代方案感兴趣的同学,请直接跳到末尾的第五部分,有列出了目

php 获取数组第一个key 第一个键值对 等等

PHP 获取数组中的第一个元素或最后一个元素的值或者键值可以使用 PHP 自带的数组函数. PHP 获取数组中的第一个元素的值或者键值所使用的函数: current() - 返回数组中当前元素值(即:返回当前被数组内部指针指向的元素的值). reset() - 函数把数组的内部指针指向第一个元素,并返回这个元素的值. key() - 返回数组内部指针指向的元素的索引(即:键值). PHP 获取数组中的最后一个元素的值或者键值所使用的函数: end() - 函数将数组内部指针指向最后一个元素,并返

iOS KVC 和 KVO 的学习

KVC  (NSKey Value Coding) :键值编码 KVO (Key Value Observing) :键值监听 我曾经用过 监听 一个音频何时结束 监听视频播放 状态等 用了这种方法 今天特地总结一下KVC 和 KVO.以方便以后深入学习与运用. 再而有了全新认识,再做更专业的总结. KVC :  一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问. 简单的说,KVC 可以不进行任何操作 就可以进行对象属性的动态读写.

iOS KVC 和 KVO 区别简单总结

KVC: key value coding,键值编码.是一种通过使用属性的名称(key)来间接访问对象属性的方法.这个方法可以不用通过 setter/getter 方法来访问对象的属性.该方法使用的实质是,是使用 valueForKey来代替 getter 方法, setValueForKey 来代替 setter 方法. KVC 常用的方法: - (id)ValueForKey:   通过 key 值读取对象的属性 -(id)setValue: forKey: 通过 key 的值来使用属性 -

K-V-C 键值观察机制

在两个不同的控制器之间传值是iOS开发中常有的情况,应对这种情况呢,有多种的应对办法.kvc就是其中的一种,所以,我们就在此解释之.   key value observing  键值观察,给人一种高冷的感觉,其实,我们可以用一个通俗的例子来解释之.就拿美俄之间的间谍来举例子.美俄是两个各自独立的国家,但是为了各自的利益,彼此之间勾心斗角,不断的爆出间谍丑闻.打住!从政治的深渊回到技术层面O(∩_∩)O.美国想知道俄罗斯的最新的导弹技术,于是派间谍收集情报,(kvo的第一步:注册观察者-美国,监

iOS核心笔记—KVO机制

1.KVO KVO简介:Key Value Observing,通过Key键观察对象的对应Key键的属性值Value是否发生改变. KVO的作用: 当前对象想监听另一个对象的某个属性是否发生变化. KVO使用步骤:①给对象的某个属性添加监听器:②监听器实现监听方法:③对象销毁前一定要移除监听器. 当前对象监听另一个对象的某个属性: [person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionN

IOS 开发之 KVO和KVC 模式的简单使用

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //1.KVC的使用 //  Key Value Coding的缩写, 表示键值编码 //作用:  通过字符串标示的方式访问对象的property和实例变量 //项目中使用:    使用KVC实现JSON中字典到model的转换 Car *car = [[Car al