美文网首页
(十四)手动触发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

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

  • 04. KVO使用,原理,本质

    问题 KVO日常使用 KVO原理(KVO本质是什么) 如何手动触发KVO 直接修改成员变量会触发KVO吗 KVO图...

  • 手动 触发 kvo

    手动 触发 kvo 过程如下: 重写automaticallyNotifiesObserversForKey 返回...

  • 手动触发KVO

    [self willChangeValueForKey:@"属性名称"]; // “手动触发的KVO”[self ...

  • 手动触发KVO

    KVO中,当被观察的属性改变时,KVO被触发。举例如下:KVO监测Person类实例person的name属性。当...

  • KVO—手动触发

    如上所示的Student类有个score属性,通过KVO添加观察者监听score属性后,可以通过下面3中方式来改变...

  • 深入理解KVO

    iOS | KVO | Objective-C KVO的本质是什么,如何手动触发KVO? 1.什么是KVO KVO...

  • KVO

    iOS用什么方式实现对一个对象的KVO 如何手动触发KVO 直接修改成员变量会触发KVO么? KVO [self....

  • KVO的内部实现原理

    关于KVO,首先我们来看两道面试题 KVO的本质是什么?如何手动去触发KVO?直接修改成员变量会触发KVO么? 怎...

  • KVO

    目录 1. KVO的使用1.1 KVO基本使用方法1.2 KVO手动触发模式1.3 KVO属性依赖1.4 KVO容...

网友评论

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

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