手动触发KVO

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:

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

  • Manual Change Notification
  • KVC 和 KVO

你可能感兴趣的:(手动触发KVO)