美文网首页
(十四)手动触发KVO

(十四)手动触发KVO

作者: 叔叔不吃棒棒糖 | 来源:发表于2017-07-14 13:30 被阅读26次

    前言

    讲真,这个KVO我没怎么用过,所有出发点只是学习,并没有满足什么需求的强烈愿望,不过这个也是OC重要的一部分,还是得看看。

    KVO触发的一些理解

    首先呢,apple提供给我们的是自动的触发方法。手动触发呢也是一定程度上对自动触发的模拟。那么我们将触发的方法放在何处才能达到目的呢,这个应该稍微分析下。KVO说白了我认为是一种KVC的处理方法,根本上来说还是作用于属性的,让我们来及时发现属性的变化。那么我们的手动触发方法应该放在属性改变这一块,对于属性的改变,apple提供了一个现成的方法-set,所以我们的手动触发方法就应该放在要作用的属性的set方法里。(完美分析,恩,都是假的)

    KVO触发我们需要用到什么

    首先是两个方法

    - (void)willChangeValueForKey:(NSString *)key
    - (void)didChangeValueForKey:(NSString *)key
    

    这两个方法就是字面上意思,在set之前调用willChangeValueForKey,在set之后调用didChangeValueForKey,因此我们如果要实现KVO手动调用,也就实在set方法中,调用上述两个方法。

    怎么手动出发这个方法

    + (BOOL)automaticallyNotifiesObserversOfName
    {
        return NO;
    }
    - (void)setName:(NSString *)name
    {
        if(_name == name){
            return;
        }
        [self willChangeValueForKey:@"name"];
        _name = name;
        [self didChangeValueForKey:@"name"];
    }
    
    

    结果

    2017-07-14 13:28:09.614 textview[16786:1498912] have a new name 飞度
    2017-07-14 13:28:09.614 textview[16786:1498912] have a new name 思域
    2017-07-14 13:28:09.614 textview[16786:1498912] have a new name 手扶拖拉机
    

    首先呢我们先关闭自动调用,一旦调用了,我们的KVO就是失效啦。
    然后我们重写了set方法,于是就有了接下来的打印,所以,我宣布,成功啦。
    完结撒花。
    【整理来自于手动触发KVO

    相关文章

      网友评论

          本文标题:(十四)手动触发KVO

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