iOS:KVO的简单使用及其本质

KVO全称Key-Value Observer. 是观察者设计模式的一种实际应用.

KVO的操作对象是对象.

简单使用:

现在创建一个Person类,Person类中有一个age属性,当点击按钮的时候改变age属性的值


#import "ViewController.h"
#import "Person.h"

@interface ViewController ()
@property(nonatomic,strong)Person *person;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.person = [[Person alloc]init];
    self.person.age = @12;
    //为person添加观察者 同时监听新值和旧值
    [self.person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
}

//按钮点击
- (IBAction)btnClick {
    self.person.age = @18;
}

//keyPath:监听的值 object:被观察的对象 change:包含新值和旧值
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
    NSLog(@"监听的值是:%@---被观察的对象是:%@---改变:%@",keyPath,object,change);
}

//移除观察者
- (void)dealloc{
    [self.person removeObserver:self forKeyPath:@"age"];
}

@end

输出结果:


KVO的本质:

如果我们用正常的方法监听一个对象的新值与旧值会采取下面的方法


在回调方法处打一个断点我们会发现被观察对象Person有一个NSKVONotifying_Person子类


其实KVO的本质就是在程序运行的过程之中,动态的产生一个被监听对象的子类,在这个子类之中重写被监听属性的set方法同时调用[super setXXX]方法,以实现对被监听对象属性的监听.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值