iOS之KVO

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

先创建一个person类并定义name和sex属性,当person的name或sex属性发生变化时会执行一个action<br><br>/**

     *  KVO --- Key Value Observe(键值观察者)

     *  KVO 是一种设计模式,属于观察者设计模式

     *  观察者设计模式涉及到以下内容:观察者、被观察者、观察的事项

     *  工作原理:观察者 观察 被观察者 指定的属性是否发生变化,一旦发生变化,就执行一个action

     *  KVO 是基于 KVC 的,通过keyPath指定需要观察的属性

     */

    

    _person = [[Person alloc] init];

    // 控制器观察model的变化

    

    // self作为观察者 观察person的name属性的变化

    [_person addObserver:self
forKeyPath:@"name"
options:(NSKeyValueObservingOptionNew
| NSKeyValueObservingOptionOld) context:Nil];

    _person.name = @"zhangsan";

    [_person setValue:@"lisi"
forKey:@"name"];

    

    [_person addObserver:self
forKeyPath:@"sex"
options:(NSKeyValueObservingOptionNew
| NSKeyValueObservingOptionOld) context:Nil];

    _person.sex = @"nan";

    

    /**

     *  总结KVO的四个步骤

     * 1 [被观察者 addObserver:观察者 forKeyPath:被观察的属性 options:观察设置 context:参数]

     * 2 观察者实现 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

     * 3 被观察者属性发生变化

     * 4 移除观察者

     */

  当person的被观察属性发生变化时会执行下面的方法

?





1

2

3

4

5

6

7

8

9

10

11

12

/**

 *  当被观察者被观察的属性发生变化时 执行此方法

 *

 *  @param keyPath 被观察的属性

 *  @param object  被观察者

 *  @param change  变化

 *  @param context ?????????? 还不理解

 */

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

{

    NSLog(@"\nkeyPaht%@ \nobject%@ \nchange%@ \ncontext%@", keyPath, object, change, context);

}

  

时间: 2024-08-07 19:32:04

iOS之KVO的相关文章

iOS开发-KVO的奥秘

iOS开发-KVO的奥秘 字数2933 阅读3842 评论28 喜欢57 序言 在iOS开发中,苹果提供了许多机制给我们进行回调.KVO(key-value-observing)是一种十分有趣的回调机制,在某个对象注册监听者后,在被监听的对象发生改变时,对象会发送一个通知给监听者,以便监听者执行回调操作.最常见的KVO运用是监听scrollView的contentOffset属性,来完成用户滚动时动态改变某些控件的属性实现效果,包括渐变导航栏.下拉刷新控件等效果. 渐变导航栏 使用 KVO的使用

iOS的KVO使用和轻量级封装

KVO的用法 注册 [object addObserver:observer forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil]; 实现回调方法 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if(

iOS KVC/KVO总结

http://www.cnblogs.com/QM80/p/3647819.html 如果要修改对象的属性值 1.一般情况下是直接利用对象属性的set方法来修改: Student *stu = [[Student alloc] init]; // set方法的两种书写格式 [stu setAge:10]; stu.age = 10; 2.但是如果不知道对象类型呢?那么就可以运用KVC键值编码(Key Value Coding) 间接的修改对象属性 KVC实现方式是:使用字符串来描述对象需要修改的

ios 之kvo&amp;kvc的使用

转载:http://www.cnblogs.com/kenshincui/p/3871178.html 概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听(KVO)特性: 键值编码KVC 键值监听KVO 键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于Obj

iOS开发——KVO/KVC&amp;OC与Swift篇详解

Swift中使用KVC和KVO的类都必须必须继承自NSObject KVC key-value coding 是1种间接访问对象的机制 key的值就是属性名称的字符串,返回的value是任意类型,需要自己转化为需要的类型 KVC主要就是两个方法 (1)通过key设置对应的属性 (2)通过key获得对应的属性 举例 class TestForKVC:NSObject{ var hwcCSDN = "hello world" } var instance = TestForKVC() va

ios 中 KVO

KVO(Key value observe)键值观察,是ios中的一种核心的概念,简单的理解为当某一个对象A(或者多个对象)要想监听对象的B的一个或者多个属性发生变化时,就是用这种机制. KVO的优点 当某个对象有个属性改变,KVO会自动的消息通知对方,这样的架构有多种好处.首先开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知,这是KVO机制的最大优点,因为这个方案已经被明确定义,获得框架级的支持,可以方便的采用,开发人员不需要添加任何代码,不需要设计自己的开发者模型,直接就可以

【原】iOS下KVO使用过程中的陷阱

======================================================= 原创文章,转载请注明 编程小翁@博客园,邮件[email protected],欢迎各位与我在C/C++/Objective-C/机器视觉等领域展开交流! ======================================================= KVO,全称为Key-Value Observing,是iOS中的一种设计模式,用于检测对象的某些属性的实时变化情况并作

iOS之KVO和KVC

概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听(KVO)特性: 键值编码KVC 键值监听KVO 键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Value Codin

ios设计模式—kvo观察者模式

哎呀,新的一年过去了祝大家新年快乐 因为在之前的项目中使用观察者模式去解决了一些问题并且效果比较好,比如说键盘收起(这个用的是uiwindow中自带的通知类型),还有就是我年前的项目中一写具体的东西,需要app后台持续定位上传给服务器,并由服务器返回的字段判断是否结束定位,我讲返回的字段传给delegate的一个属性用于记录当前是否需要定位的状态,我选用了kvo进行检测appDelegate中我自定义的一个属性,一旦该属性的属性值变为1,则停止定位,可能这样比较麻烦但是个人认为思路比较清晰,哈哈

IOS中KVO模式的解析与应用

最近老翁在项目中多处用到了KVO,深感这种模式的好处.现总结如下: 一.概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了. KVO其实也是“观察者”设计模式的一种应用.我的看法是,这种模式有利于两个类间的解耦合,尤其是对于 业务逻辑与视图控制 这两个功能的解耦合. 二.引子 先来看个引子: 有一个业务类:Walker,在这个类内部只负责关于