KVO

使用KVO的要求是对象必须能支持kvc机制——所有NSObject的子类都支持这个机制。
1.一般使用

//添加监听者
[self.tableView addObserver: self forKeyPath: @"frame" options: NSKeyValueObservingOptionNew context: nil];
//监听属性值发生,改变时回调
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
}

2.如果一个属性是由其他几个属性决定,如firstName + lastName = fullName。fullName是由firstName和lastName决定的,想要监听fullName的变化,那么当firstName和lastName改动的时候,该值必须被通知
除了实现上面的基本方法,还要实现下面方法

+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
    NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
    if ([key isEqualToString:@"fullName"]) {
        NSSet *affectingKeys = [NSSet setWithObjects:@"lastName", @"firstName",nil];
        keyPaths = [keyPaths setByAddingObjectsFromSet:affectingKeys];
    }
    return keyPaths;
}

个人理解:在[xxx addObserver: self forKeyPath: @"fullName" options: NSKeyValueObservingOptionNew context: nil];建立观察者方法时候,会调用+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key方法,将其key扩充了
“lastName”和“firstName”,所以当firstName和lastName都会调用
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 或者KVO,是一个非正式协议,它定义了对象之间观察和通知状态改变的通用机制。 基本使用 使用KVO必须要满足的条件...
    一枚iOS程序猿阅读 825评论 0 0
  • 转载:http://yulingtianxia.com/blog/2014/05/12/objective-czh...
    F麦子阅读 1,098评论 0 0
  • 本文由我们团队的 纠结伦 童鞋撰写。 文章结构如下: Why? (为什么要用KVO) What? (KVO是什么...
    知识小集阅读 7,486评论 7 105
  • KVO Key-Value observing(KVC),键值观察,它提供一种机制,当被观察的对象的属性被修改后,...
    iOS_陈楠阅读 705评论 1 51
  • 本文结构如下: Why? (为什么要用KVO) What? (KVO是什么) How? ( KVO怎么用) Mo...
    等开会阅读 1,736评论 1 21

友情链接更多精彩内容