iOS kvo设计模式

作者: Figo_OU | 来源:发表于2015-07-05 08:52 被阅读970次

    好久没有写文章了,都感觉对不住我的粉丝了。
    好,今天就写写最近在开发的时候遇到的一些问题。这篇文章先介绍一下kvo设计模式。
    kvo设计模式在很多文章都有提到过,但是我在查阅资料的时候,感觉这些文章写得都好乱,看来几篇的文章才明白要怎么设计。

    1. 首先,应该设计数据模型(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上了,如果大家有问题,可以留言或者简讯我。

    相关文章

      网友评论

        本文标题:iOS kvo设计模式

        本文链接:https://www.haomeiwen.com/subject/jmsyqttx.html