B3-KVO概念(待续)
一、定义
KVO就是key-value observing,即键值观察。同样也是观察者模式,主要的用处是监听对象属性的变化。KVO和KVC被称为cocoa的大招。
二、使用
// 1、添加监听方法 [self.p addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"hello world"]; /* 参数 1. 监听对象,即观察者 2. 监听的键值路径->属性 3. 监听选项 4. 上下文- 因为可以监听多个对象的键值变化,通过上下文可以更好区分开! */
// 2、所有KVO监听到的事件变化,都会执行此方法 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { NSLog(@"%@ %@ %@ %@", keyPath, object, change, context); } // 1、keyPath:被监听的属性 // 2、object:被监听的属性 // 3、change:字典 // 4、context:上下文
三、特点:
1、所有变化都会调用统一的监听方法!
2、KVO 是同步的。
3、使用KVO要注意多个线程如果要修改同一个对象的属性,多线程抢夺资源,会增加程序编码的难度。
4、KVO用处,如果不涉及多线程,只是简单监听某一个对象的属性变化,使用KVO代码相对还是简单一些。