好久没有写文章了,都感觉对不住我的粉丝了。
好,今天就写写最近在开发的时候遇到的一些问题。这篇文章先介绍一下kvo设计模式。
kvo设计模式在很多文章都有提到过,但是我在查阅资料的时候,感觉这些文章写得都好乱,看来几篇的文章才明白要怎么设计。
- 首先,应该设计数据模型(model),例如本文的model是point
//point.h
@interface point : NSObject
@property (assign,nonatomic) int redp;
@property (assign ,nonatomic) int ooo;
//然而ooo这参数没什么用,只是用来观察当redp变量改变时,监听ooo会不会调用方法。
-(instancetype)initWithRedpoint:(int)po :(int)ooo;
@end
.m
#import "point.h"
@implementation point
-(instancetype)initWithRedpoint:(int)po :(int)ooo{
if (self = [super init]) {
self.redp = po;
self.ooo = ooo;
}
return self;
}
@end
2.设置完model后,我们开始创建实例
.h
@property (strong,nonatomic) point * p;//写在.h文件上是为了其他的控制器可以对它赋值,以触发监听动作。
.m
_p = [[point alloc] initWithRedpoint:1 :1];//初始化
[_p addObserver:self forKeyPath:@"redp" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
//监听当redp的值改变时,就触发处理方法。
3.设置处理方法,在.m文件下添加下面的方法。当p.redp的值被改变的时候,就会来到这个方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualToString:@"redp"])
{
NSLog(@"修改了值%d",_p.redp);
//[self done];
}
}
4.可以在其他的控制器中修改p.redp的值,试试能不能调用方法吧。
- 感觉已经写得很清楚了,就不把源码上传到github上了,如果大家有问题,可以留言或者简讯我。
网友评论