iOS kvo設(shè)計(jì)模式

好久沒(méi)有寫文章了,都感覺(jué)對(duì)不住我的粉絲了。
好,今天就寫寫最近在開(kāi)發(fā)的時(shí)候遇到的一些問(wèn)題。這篇文章先介紹一下kvo設(shè)計(jì)模式。
kvo設(shè)計(jì)模式在很多文章都有提到過(guò),但是我在查閱資料的時(shí)候,感覺(jué)這些文章寫得都好亂,看來(lái)幾篇的文章才明白要怎么設(shè)計(jì)。

  1. 首先,應(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)訊我。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容