手动触发KVO

作者: NapoleonY | 来源:发表于2016-07-19 22:10 被阅读1583次

KVO中,当被观察的属性改变时,KVO被触发。举例如下:
KVO监测Person类实例person的name属性。当name值改变时,方法- setName:被调用。此时下面两个方法会在运行- setName:之前之后被调用。

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

如果我们实现了- setName:方法或者使用synthesize的nameaccessor 到时候就会发生这样的事情。
有些情况下当我们需要override -setLComponent: 并且我们要控制是否发送键值改变的通知的时候,我们要做以下的事情:

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

我们关闭了-willChangeValueForKey:-didChangeValueForKey:的自动调用,然后我们手动调用他们。我们只应该在关闭了自动调用的时候我们才需要在 setter 方法里手动调用 -willChangeValueForKey:-didChangeValueForKey:

备注:
可以参考下面两篇文章:

相关文章

  • 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容...

  • iOS KVO的手动实现过程

    如何手动触发一个value的KVO 手动实现 willChangeValueForKey 和 didChangeV...

网友评论

    本文标题:手动触发KVO

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