码迷,mamicode.com
首页 > 移动开发 > 详细

iOS之KVO

时间:2014-05-09 16:15:37      阅读:424      评论:0      收藏:0      [点我收藏+]

标签:blog   class   code   ext   c   com   

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);
}

  

iOS之KVO,布布扣,bubuko.com

iOS之KVO

标签:blog   class   code   ext   c   com   

原文地址:http://www.cnblogs.com/NatureZhang/p/3718154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!