UI day 16 KVO观察者模式

本文详细介绍了KVO(键值观察)机制的实现过程,包括如何创建被观察者对象、为被观察者注册观察者、触发观察机制的具体时机及如何移除观察者等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

1.创建一个被观察者对象
   
self.person = [[Person alloc]init];

2.给被观察者注册观察者
//    NSKeyValueObservingOptionNew 当重新给被观察者的name赋值时,触发监听方法,此时打印的chang(里面都是value值)永远都是最新的值
//    NSKeyValueObservingOptionOld 当重新被观察者的name赋值是,触发监听方法,此时打印的chang 永远都是上一次的旧值
//    NSKeyValueObservingOptionInitial 当初始化被观察者时,此时走监听方法 或者是重新赋值给观察者对象赋值的时候,此时走监听方法
//    NSKeyValueObservingOptionPrior  当被观察者name属性赋值前后都会触发监听方法  notificationIsPrior =1 标示赋值前触发
//   第一个参数:注册的观察者对象  第二个参数:要观察的key值路径  第三个参数:要观察value值的变化情况
 [self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionOld context:nil];
    self.person.name = @"guomeimei";//旧值

3. 触发的时机 一旦观察者发现,被观察者的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值改变,就修改View的背景颜色
   
self.view.backgroundColor = [UIColor colorWithRed:kColorValue green:kColorValue blue:kColorValue alpha:1.0];
}


4. 移除观察者  观察完成之后要移除观察者 观察者只能被移除一次  第二次就Crash
[self.view.subviews.firstObject removeFromSuperview];













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值