KVO模式 ———满足猥琐大众的 偷窥模式

KVO模式浅谈-满足猥琐男的偷窥模式


马仔哥


KVO模式 Key-Value Observing 它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。

KVO其实也是“观察者”设计模式的一种应用。我的看法是,这种模式有利于两个类间的解耦合,尤其是对于 业务逻辑与视图控制 这两个功能的解耦合。


我自己的看法:我一般把KVO模式称为 偷窥模式 ,很形象,因为建立一个观察者,并且用到的回调函数,被观察者根本不知道,所以我把KVO 模式叫做偷窥者模式,感觉真的很形象。

闲话不说用一个很简单的OC程序来更加直观的来理解


首先创建一个person类

.h文件的内容

““

import

import “BankAccount.h”

@interface Person : NSObject{
BankAccount * bankAccount;
}
//打开监听银行账号的能力
- (void)registerAsObserver;

@end
““

.m文件

“`
#import “Person.h”

@implementation Person
-(id)init{
self =[super init];
if(self){
bankAccount =[[BankAccount alloc]init];
}

return self;

}
//OpeningBalance 指向自己的指针
static void * openingBalance =(void *)&openingBalance;
- (void)registerAsObserver{
//监听银行账号的变化 context 后面跟一个不相同的数

[bankAccount addObserver :self forKeyPath:@"openingBalance" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:openingBalance];
   /*
给银行账号bankAccount增加一个新的监听 self ,监听openingBalance的变化过程  只要openingBalance 有变化,就会调用下面的方法
*/

}
// 这个方法就是监听的回调函数
//就是说bankAccount 里面只有openingBalance有变化了,就会调用下面的这个方法
// keyPath 表示之前监听的key就是 openingBalance
// object表示bankAccount
// change是一个字典 里面包含了新,旧 的值
//context 是私有变量OpeningBalance
- (void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary

创建银行的账户类 BankAccount
.h文件

““
#import

.m文件

““
#import “BankAccount.h”

@implementation BankAccount
- (id)init{
self =[super init];
if(self){

    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(balanceUpdate) userInfo:nil repeats:YES];
}

return self;

}
- (void)balanceUpdate{
float f =self.openingBalance;
f +=arc4random()%100;
//切记不可以这么写 这样写会没有任何的变化
// _openingBalance=f;

//写法一
self.openingBalance=f;
//写法二
//[self setOpeningBalance:f];
//写法三 kVC 写法
//[self setValue:[NSNumber numberWithFloat:f] forKey:@"openingBalance"];

//写法四
//[self willChangeValueForKey:@"openingBalance"];
//_openingBalance=f;
//[self didChangeValueForKey:@"openingBalance"];

}
@end

““

在main函数中调用

““
#import

运行的结果如下

2016-05-10 23:32:52.415 KVO[509:11870] how
2016-05-10 23:32:53.421 KVO[509:11870] 新的值 59,旧的值0
2016-05-10 23:32:54.423 KVO[509:11870] 新的值 66,旧的值59
2016-05-10 23:32:55.421 KVO[509:11870] 新的值 130,旧的值66


如果有不明白的 ,请在我的博客上留言,我会第一时间回复。


马仔哥:

更多分享请关注微博 IT一散人

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值