观察者模式

苹果其实在语言层面为我们做了很多事,比如Category实现装饰模式的意图,target-action实现命令模式意图等等,对于观察者模式,苹果也提供了KVO和通知中心,给开发者提供了极大的遍历。

观察着模式即一个对象发出广播,然后某些对象可以在得知这个广播之后做相应的反应。

KVO用来监控某个变量,是一种局部性的监听机制,使用方式如下:

首先,为被检测的变量添加一个观察者:

1 [被监测对象 addObserver:self forKeyPath:@"xxx" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];

然后再它的观察者类(这里是self)当中使用如下方法进行响应:

1 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

一个弊端在于,任何KVO方法都走这一个响应方法,那么就要在其中对KeyPath参数进行判断。

第二种方式通知中心是一个全局单例,使用方式如下:

首先,在通知发送端:

1 NSNotification *notify = [NSNotification notificationWithName:@"xxx" object:self];
2 [[NSNotificationCenter defaultCenter] postNotification: notify];

通知是以key:object的方式定义的,将它post到通知中心的单例对象当中。

在通知响应端,首先注册:

1 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(responseNotify:) name:@"xxx" object:nil];

然后实现响应:

1 - (void)responseNotify:(NSNotification *)sender {
2     if ([sender.name isEqualToString:@"LoadDataStart"]) {
3     ...

使用起来还是很简单的,不需要像java那样写很多的类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值