KVC 与 KVO

设计模式–观察者模式

设计模式 : 解决某一特定问题

观察者模式 : 假如有个A类,然后在一些类中要去观察A类发生的变化时,这些类就会收到信息,做出相应的反应.

什么时候用到观察者模式?
当一个类需要发送多个消息给多个类的时候,就用观察者模式

观察者的作用?
一对多的消息发送

在OC中如何实现观察者模式?
OC中观察者模式的设计基础 : KVC KVO

KVC(键值编码 Key-Value-Coding)

现创建一个学生类


一般要对属性进行赋值和访问时可运
1.改变实例变量的作用域 @public
2.运用setter和getter语法
这些都是直接进行访问

还有一种情况,属于间接访问 就是KVC(setValue: forKey:)

为什么要用KVC访问属性???
使用KVC的能节省代码,而且可扩展性更强,更灵活
如:

这种代码如果再继续增加属性,就需反复增加else if.
运用KVC

当我们要访问一个A类的属性时,A中的属性是B类中的属性,这时候就可以用KVC(setValue: forKeyPath:)
如:创建一个Book类有一个bookName属性,导入到学生类中,通过访问学生类来访问bookName


KVO 观察键值对修改

KVO的由来
在编译的过程中,我们经常需要判断目标是否发生变化,以便及时做出对应的处理.此时苹果公司就提供一种策略,即OC运行时提供KVO. (KVO是基于KVC实现)

KVO的实现:
1.注册成为观察者
2.观察者定义KVO回调
3.移除观察者

创建一个Hero类

#import <Foundation/Foundation.h>

@interface Hero : NSObject
{
    NSInteger _hp;
}
@end

再创建一个观察者Observe类 导入Hero类

#import <Foundation/Foundation.h>
#import "Hero.h"
@interface Observer : NSObject

@property(nonatomic,strong)Hero *hero;

-(id)initWithHero:(Hero *)hero;

@end

在Observe类的.m文件中

第一个参数: 常设为self,接收通知的对象,即观察者
第二个参数: 键路径参数,要观察的键路径
第三个参数: 标识KVO 希望变化如何传递给观察者 ,这些值可以使用”|”进行多选.

其中change是个字典 ,change[]和[change…]都是一样的

运行的结果会显示出_hp

现在加个计时器

注意_hero=hero和_observe=observe这步操作,不进行这步的话observe将会在中途被移除

下图是将变量改为全局变量

这里首先要将hero和observe改为全局变量

其中这里没有加计时器的环境是因为系统自带了!!!
(KVO有点懵>.<加计时器 更加懵~~~~>.<)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值