【iOS7的一些总结】7、键值观察者模式KVO

1、概念:

所谓键值观察者,是一个对象获取其他对象特定属性变化的通知机制。看上去KVO同通知机制类似,而不同点在于KVO没有提供一个所谓的通知中心为所有的观察者提供变化通知,而是当变化发生时,通知直接送达正在观察的对象。

2、键值观察者模式的实现:

(1)注册观察者:

观察对象发送消息到被观察对象,以建立二者的观察关系:

- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;

keyPath所指的是被观察对象的属性名,用字符串表示。

(2)当所观察对象的属性发生变化时,调用以下方法:

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

需要注意的是,keyPath所表示的属性,必须使用setter方法或者kvc方法改变值的时候才会调用kvo的观察响应函数,直接在类的内部改变属性的值,kvo方法无效。

(3)移除观察者:

- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

移除之后,对象属性的变化将不会再引发响应函数的调用。

时间: 2024-11-10 01:00:32

【iOS7的一些总结】7、键值观察者模式KVO的相关文章

obj-c编程17:键值观察(KVO)

    说完了前面一篇KVC,不能不说说它的应用KVO(Key-Value Observing)喽.KVO类似于ruby里的hook功能,就是当一个对象属性发生变化时,观察者可以跟踪变化,进而观察或是修正这个变化,这是通过回调观察者注册的回调函数来完成的.要使用键值观察,必须满足3个条件: 1 被观察对象必须对所观察属性使用符合KVC标准的存取器方法: 2 观察者必须实现接受通知的方法(回调方法):-observeValue:forKeyPath:ofObject:change:context:

基于键值的观察者模式编程

键值观察提供了一个机制,允许当其他对象的特定属性被修改时通知观察者对 象.这一机制在应用程序的模型和控制器之间的通讯方面尤其有用.通常情况下 ,控制器对象观察模型对象的属性,而视图对象通过控制器观察模型对象的属性 .此外,一个模型对象也可以观察其他模型对象. 要接收一个属性的键值观察通知,需要: 被观察对象调用addObserver:forKeyPath:options:context:方法注册观察者 对象: 观察类必须实现observeValueForKeyPath:ofObject:chan

在Python中用get()方法获取字典键值的教程

  这篇文章主要介绍了在Python中用get()方法获取字典键值的教程,是Python入门中的基础知识,需要的朋友可以参考下 get()方法返回给定键的值.如果键不可用,则返回默认值None. 语法 以下是get()方法的语法: ? 1 dict.get(key, default=None) 参数 key -- 这是要搜索在字典中的键. default -- 这是要返回键不存在的的情况下默认值. 返回值 该方法返回一个给定键的值.如果键不可用,则返回默认值为None. 例子 下面的例子显示了g

拒绝远程修改Windows8注册表的键值

很多用户为了操作方便,可能会开启Windows 8系统的远程修改键值功能,允许用户从网络中的任何位置,远程修改Windows 8系统的相关注册表键值,以达到高效管理目的. 不过,当Windows 8系统开启了这项功能后,很容易被恶意用户通过专业工具侦测扫描到,这样该功能可能会被偷偷地非法利用,例如,恶意用户可以远程修改注册表键值,将攻击程序偷偷添加到注册表启动项中,以达到攻击Windows 8系统的目的.为了阻止病毒借助番茄花园这种功能攻击本地系统的安全,我们不妨进行下面的操作,拒绝远程修改键值

json-android把一个字符串变成键值对的形式

问题描述 android把一个字符串变成键值对的形式 android客户端把一个字符串变成键值对(JSON之类的)的形式,比如:{name=张三,age=20,sex=男}..实在不明白..唉..求解答.. 解决方案 String[] arrays = new String[]{"name=张三", "age=20", "sex=男"}; JSONObject element = new JSONObject(); for(int i= 0; i

python通过字典dict判断指定键值是否存在的方法

 这篇文章主要介绍了python通过字典dict判断指定键值是否存在的方法,实例分析了Python中使用has_key及in判断指定键值是否存在的技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了python通过字典dict判断指定键值是否存在的方法.分享给大家供大家参考.具体如下: python中有两种方法可以判断指定的键值是否存在,一种是通过字典对象的方法 has_key 判断,另外一种是通过 in 方法,下面是详细的范例. ? 1 2 3 4 5 d={'site':'h

主键值数据类型-informix数据库,不小心把主键值从int8改成float类型了

问题描述 informix数据库,不小心把主键值从int8改成float类型了 informix数据库,不小心把主键值从int8改成float类型了,然后值就变了.有人能帮忙看一下可能原因是什么吗? 解决方案 补充一下,数值由824变成800,转换的是informix数据库的主键值,由int8转为float

PHP二维数组去重的方法(保留各个键值的同时去除重复的项)-- 二维数组的唯一性

对于如下二维数组,要求对其进行去重: $arr = array( '0'=>array( 'name'=>'james', 'age'=>30, ), '1'=>array( 'name'=>'susu', 'age'=>26, ), '2'=>array( 'name'=>'james', 'age'=>30, ), 'new'=>array( 'name'=>'kube', 'age'=>37, ), 'list'=>arr

LightCloud:分布式键-值数据库

Plurk.com在今年2月28日开源了LightCloud这个分布式的键-值数据库,根据 官方网站的信息,有以下特性 基于Tokyo Tyrant(这个项目貌似又是另一个名叫Tokyo Cabinet的数据库系 统的网络接口).Tokyo Tyrant是最快的键-值数据库之一,并且已经开发了好几 年并且在n个网站中被应用. 性能非常好(可以和memcached进行对比) 在很少的服务器上面可以存储百万级的数据量 简单的通过添加节点来扩展 节点可以通过master-master复制来进行备份.很