iOS中 KVO 键值观察者

简介: KVO Key-Value-Obsever 键值观察者 1.首先要有一个观察者,此时被观察者是自己找一个观察者观察自己的key值对应的value值有没有改变,如果改变了就可以做一些响应的操作 创建一个被观察者: self.

KVO Key-Value-Obsever 键值观察者

1.首先要有一个观察者,此时被观察者是自己找一个观察者观察自己的key值对应的value值有没有改变,如果改变了就可以做一些响应的操作

创建一个被观察者:

    self.person = [[Person alloc]init];

2.给被观察者注册观察者

NSKeyValueObservingOptionNew    当重新给被观察者的key值赋值时,触发监听方法,此时打印的 change 永远都是最新的值 存放的是value值
    
NSKeyValueObservingOptionOld      当重新给被观察者的key值赋值时,触发监听方法,此时打印的 change 永远都是上一次的旧值 存放的是value值
    
NSKeyValueObservingOptionInitial    当初始化被观察者对象或者重新给观察者对象赋值的时,此时走监听方法
    
NSKeyValueObservingOptionPrior      当被观察者的name属性赋值前后都会触发,notificationIsPrior = 1 标识赋值前后触发

第一个参数:注册的观察者对象

第二个参数:要观察的key路径

第三个参数:观察value值的变化情况

  [self.person addObserver:self forKeyPath:@"name" options:(NSKeyValueObservingOptionOld) context:nil];
    self.person.name = @"guoMeiMei";

监听方法:

触发的时机:一旦观察者发现被观察者的name key值对应的value值发生变化的时候就会自动调用这个方法

一般观察的key值对应的value变化时,我们要做的一些操作都写在这个方法中

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    
    NSLog(@"%@",keyPath);
    NSLog(@"%@",object);
    NSLog(@"%@",change);
    
    //一旦key值对应的value改变,就修改value的背景颜色
    self.view.backgroundColor = [UIColor colorWithRed:kColorValue green: kColorValue blue: kColorValue alpha: 0.5];
    
}
Person类:

Person.h
@interface Person : NSObject
@property(nonatomic,copy)NSString *name;//名字
@property(nonatomic,copy)NSString *gender;//性别
@property(nonatomic,assign)NSInteger age;//年龄
@end

Person.m
@implementation Person
- (void)dealloc{
    self.name = nil;
    self.gender = nil;
    [super dealloc];
}

- (void)setValue:(id)value forUndefinedKey:(NSString *)key{
    
}

- (NSString *)description{
    return [NSString stringWithFormat:@"姓名:%@ 性别:%@ 年龄 %ld",_name,_gender,_age];
}
@end

改变属性值:

- (IBAction)setValue:(UIButton *)sender {
//    NSLog(@"改变属性值");
    //name属性的新值
    self.person.name = @"liangChen";
    
}

移除观察者:

- (IBAction)removeOberver:(UIButton *)sender {
//    NSLog(@"移除观察者");
    //观察完成之后要移除观察者,观察者只能被移除一次,第二次就会Crash
    [self.person removeObserver:self forKeyPath:@"name"];
    
}
效果展示:

目录
相关文章
|
存储 iOS开发
iOS Principle:KVO(下)
iOS Principle:KVO(下)
105 0
iOS Principle:KVO(下)
|
存储 C语言 iOS开发
iOS Principle:KVO(上)
iOS Principle:KVO(上)
119 0
iOS Principle:KVO(上)
|
安全 iOS开发
iOS探索 -- KVO 的原理分析
KVO (key-value-observing) 是一种 键值观察 机制, 它允许当前对象去观察目标对象的某个属性的变化; 当被观察对象的属性发生变化后, 会通过特定方法通知观察者对象属性变化的一些情况内容, 观察者对象拿到变化情况后做出相关操作。
150 0
|
Android开发 iOS开发
iOS开发:KVC与KVO
KVC 就是键值编码(key-value-coding),可以直接访问对象的属性,或者给对象的属性赋值。黑魔法之一,很多高级的iOS开发技巧都是基于KVC实现的。 KVO 是键值观察者(key-value-observing)。实现方式:通过对某个对象的某个属性添加观察者,当该属性改变,就会调用”observeValueForKeyPath:”方法,为我们提供一个“对象值改变了!”的时机进行一些操作。
203 0
iOS开发:KVC与KVO
|
编译器 iOS开发
iOS-底层原理 23:KVO 底层原理
iOS-底层原理 23:KVO 底层原理
136 0
iOS-底层原理 23:KVO 底层原理
|
监控 iOS开发
IOS开发-KVO
观察者,观察对象属性的变化,当被观察者该属性发生变化时,观察者会接收到通知,可以在回调函数中做相应的处理
|
Java iOS开发
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(二)
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(二)
116 0
|
存储 安全 C语言
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态(一)
161 0
|
iOS开发
IOS学习笔记八(KVO)
IOS学习笔记八(KVO)
83 0
|
定位技术 iOS开发
iOS中KVC与KVO的应用解析
iOS中KVC与KVO的应用解析
121 0