如何使用KVO

以下为精简版KVO的使用

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UILabel *label = [[UILabel alloc] init];
    label.text = @"123";
    [label addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil];
    label.text = @"341";
//options: 有4个值,分别是:
//NSKeyValueObservingOptionOld 把更改之前的值提供给处理方法 
//NSKeyValueObservingOptionNew 把更改之后的值提供给处理方法 
//可以俩个都用,用|隔开
//NSKeyValueObservingOptionInitial 把初始化的值提供给处理方法,一旦注册,立马就会调用一次。通常它会带有新值,而不会带有旧值。 
//NSKeyValueObservingOptionPrior 分2次调用。在值改变之前和值改变之后。 

}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
    NSLog(@"%@的值已经改变", keyPath);
    NSLog(@"被修改的属性值为:%@", [change objectForKey:@"text"]);
    NSLog(@"被修改的上下文%@", context);
    NSLog(@"被修改的对象%@", object);
}
-(void)dealloc{
    [self removeObserver:self forKeyPath:@"text"]; // 移除监听器
}

我们创建了一个label,然后为他的text属性加了一个监听器
[label addObserver:self forKeyPath:@“text” options:NSKeyValueObservingOptionNew context:nil];
然后重写
(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context这个方法
在text的值发生变化时会激发这个方法,从而可以拿到一些值

使用场景

1.被监听者是viewControll类的实例对象
2.重写方法 谁作为观察者谁重新方法
以上为自动KVO。
手动的咱也不会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值