KVO:key value observing 键值观察
- 实际上就是三个方法:
- 1.给对象添加监听就
- 2.删除监听器
- 3.监听后调用的方法
(void *) 相当于id == NSObject ==任何对象
DXPerson *p = [[DXPerson alloc] init];
p.name = @"jack";
- 从这一行开始监听p对象name属性值的变化,也就是说必须是这行代码之后属性值发生改变才能监听到
/ ** addObserver:监听者(观察者)
* forKeyPath:被监听者对象的属性
* options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
* context:参数
*/
[p addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionOld |NSKeyValueObservingOptionNew context:@"test"];
p.name = @"rose”;
-
当被监听的对象销毁时候,监听器必须要移除监听器,否则报错(因为被监听者已经销毁,但是监听器任然在监听这个销毁的对象)
[p removeObserver:self forKeyPath:@"name”];
/**
* 当监听器发现被监听者的属性值发生改变的时候,系统就会自动调用这个方法
* @param keyPath 被监听者对象的属性名称
* @param object 哪个对象的属性被改了
* @param change 改成什么样了
* @param context 监听器传来的参数
*/
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%@,--%@---%@--%@",keyPath,object,change,context);
}