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); } |
原文地址:http://www.cnblogs.com/NatureZhang/p/3718154.html