手动触发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:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 讲真,这个KVO我没怎么用过,所有出发点只是学习,并没有满足什么需求的强烈愿望,不过这个也是OC重要的一部分...
    叔叔不吃棒棒糖阅读 3,590评论 0 1
  • 本文结构如下: Why? (为什么要用KVO) What? (KVO是什么) How? ( KVO怎么用) Mo...
    等开会阅读 5,559评论 1 21
  • 本文由我们团队的 纠结伦 童鞋撰写。 文章结构如下: Why? (为什么要用KVO) What? (KVO是什么...
    知识小集阅读 12,085评论 7 105
  • 格式体:书面语或正式场合,是敬语表达法。非格式体:口语或非正式场合,是准敬语表达法。非敬语:口语,用于同辈之间或关...
    Lyunner阅读 7,802评论 0 2
  • 上海复旦大学附属五官科医院
    东方旅游在线阅读 1,267评论 0 0