kvo 观察者模式底层深究

本文介绍了KVO(键值观察)的使用方法,包括自动和手动开启方式、实现原理等,并通过示例代码展示了如何添加及移除观察者来监听对象属性的变化。

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

KVO,观察者模式,添加观察者,监听被观察者对象属性,最后要移除观察者

使用方法:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _person = [Person new];
  
    _person.name = @"old";
    [_person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionOld context:nil];
    _person.name = @"new";
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
    NSLog(@"change=%@",change);
}
- (void)dealloc
{
    [_person removeObserver:self forKeyPath:@"name"];
}

1.开启方式分为:自动和手动,

自动:

+ (BOOL)automaticallyNotifiesObserversOfName
{
    return  YES;
}
手动时需要将这个类方法改为no就可以了

+ (BOOL)automaticallyNotifiesObserversOfName
{
    return  NO;
}
[_person willChangeValueForKey:@"name"];
_person.name = @"yinguoqiang";
[_person didChangeValueForKey:@"name"];

2.实现原理:kvo利用运行时,生成一个对象的子类,并生成子类对象,替换原来的isa指针,并且重写了set方法


观察者模式是否监听对象的地址?

不会监听,是重写对象的set方法,然后手动开启观察者模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值