好久沒(méi)有寫文章了,都感覺(jué)對(duì)不住我的粉絲了。
好,今天就寫寫最近在開(kāi)發(fā)的時(shí)候遇到的一些問(wèn)題。這篇文章先介紹一下kvo設(shè)計(jì)模式。
kvo設(shè)計(jì)模式在很多文章都有提到過(guò),但是我在查閱資料的時(shí)候,感覺(jué)這些文章寫得都好亂,看來(lái)幾篇的文章才明白要怎么設(shè)計(jì)。
- 首先,應(yīng)該設(shè)計(jì)數(shù)據(jù)模型(model),例如本文的model是point
//point.h
@interface point : NSObject
@property (assign,nonatomic) int redp;
@property (assign ,nonatomic) int ooo;
//然而ooo這參數(shù)沒(méi)什么用,只是用來(lái)觀察當(dāng)redp變量改變時(shí),監(jiān)聽(tīng)ooo會(huì)不會(huì)調(diào)用方法。
-(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.設(shè)置完model后,我們開(kāi)始創(chuàng)建實(shí)例
.h
@property (strong,nonatomic) point * p;//寫在.h文件上是為了其他的控制器可以對(duì)它賦值,以觸發(fā)監(jiān)聽(tīng)動(dòng)作。
.m
_p = [[point alloc] initWithRedpoint:1 :1];//初始化
[_p addObserver:self forKeyPath:@"redp" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
//監(jiān)聽(tīng)當(dāng)redp的值改變時(shí),就觸發(fā)處理方法。
3.設(shè)置處理方法,在.m文件下添加下面的方法。當(dāng)p.redp的值被改變的時(shí)候,就會(huì)來(lái)到這個(gè)方法
-(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的值,試試能不能調(diào)用方法吧。
- 感覺(jué)已經(jīng)寫得很清楚了,就不把源碼上傳到github上了,如果大家有問(wèn)題,可以留言或者簡(jiǎn)訊我。