iOS键值观察KVO实例详解

简介

什么是KVO?KVO是Key-Value Observing的简称,翻译成中文就是键值观察。这是iOS支持的一种机制,用来做什么呢?我们在开发应用时经常需要进行通信,比如一个model的某个数据变化了,界面上要进行相应的变化,但是如果我们程序并不知道数据什么时候会进行变化,总不能一直循环判断有没有变化吧,那么就需要在数据变化时给controlller发送一个通知,告知我变化了,你可以更新显示内容了,通知的方式有很多种,比如Notification也是其中一种方式,本文要讲解的KVO也是其中一种很轻巧的方式。

他的实现机制为,为可能改变的数据增加一个观察者,在上面的说法中这个观察者就是controller,它去观察这个数据有没有发生变化,一旦发生变化,就会得到一个信号,从而获取到变化的数据,进行自己要做的操作。

实例效果

如上图所示,界面上设置两个label,一个显示名字,一个显示分数。还有一个按钮,用来修改分数,现在要做到点击按钮分数变化。

可能你会觉得很简单,直接在按钮的响应方法中将分数的label内容修改不就可以了吗,确实如此,但是这里我们不这么做,而是使用KVO来完成。

我们创建一个学生模型,这个模型有两个属性,一个为姓名,一个为分数。label这是读取模型的数据来进行显示。

现在我们给这个实例化了的学生模型添加一个观察者,定义为我要观察学生模型的分数变化情况,这时,如果这个学生模型的分数发生了变化,比如在按钮响应中只对模型的分数属性进行修改,KVO这个机制就会自动给观察者发送通知,说这个属性变化了,你要做什么操作赶紧做。

于是我们在观察者的KVO回调函数中进行相应的操作,如果我们收到了分数变化的通知,那么就将分数label的值给修改为当前的分数。这样就实现了一套KVO键值观察的流程,当然最后还缺一步就是移除观察者,不过要在确实需要移除的时候再移除,因为移除后就不再会收到变化的通知了。

实现方式

上面例子中进行了一套KVO键值观察的流程,我们整理一下进行了哪些工作:

  1. 设计界面样式
  2. 建立学生模型
  3. 对学生的分数属性添加观察
  4. 修改学生的分数属性
  5. 在观察到变化的响应方法中进行界面更新操作
  6. 不再需要观察的时候移除观察

现在通过这个例子来一步步讲解。

设计样式

样式就不说了,两个label,一个按钮,以及按钮的响应方法,都是很常见的。

建立模型

这个部分,就是新建一个NSObject类,用来作为学生模型,有两个属性:姓名和分数,如下所示:

// StudentModel.h
@interface StudentModel : NSObject

@property (nonatomic, copy) NSString *name;
@property float score;

@end

// ViewController.m
// 在controller中实例化学生模型
self.studentModel = [[StudentModel alloc] init];
[self.studentModel setValue:@"Cloudox" forKey:@"name"];
[self.studentModel setValue:@"89.0" forKey
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值