欢迎来到风尚网
风尚网首页 > 首页 > 阅读 > KVO进阶(三)

KVO进阶(三)

作者:01_Jack 2016-02-20 09:12 来源:简书 编辑:美朵

文章摘要
前言进阶三回顾前两篇文章,共分两部分。第一部分写个奇怪的小程序,用来说明KVO的监听和被监听对象的可变性,第二部分接着上篇写KVO的依赖设置正文part1这部分直接贴代码,有疑问的地方欢迎提问(内部有循环引用没有解除)BridgePer...

前言

进阶三回顾前两篇文章,共分两部分。

第一部分写个奇怪的小程序,用来说明KVO的监听和被监听对象的可变性,第二部分接着上篇写KVO的依赖设置

正文

part 1

这部分直接贴代码,有疑问的地方欢迎提问(内部有循环引用没有解除)

Bridge

Person

Main

part 2

进阶二中提到过KVO的内部通知,很容易想到是否可以在某个方法中设置多个属性通知从而达到依赖的目的。

Observer.png

Person.h

Person.m

Main

其实如果进入Foundation/NSKeyValueObserving.h中可以发现这么个方法

+ (NSSet<NSString *> *)keyPathsForValuesAffectingValueForKey:(NSString *)key

这里可以直接实现KVO的依赖。把Person.m中的两个setter干掉,然后代码这样写

+  (NSSet<NSString *> *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
    NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
    if ([key isEqualToString:@"fullName"]) {
        NSArray *affectingKeys = @[@"givenName", @"familyName"];
        keyPaths = [keyPaths setByAddingObjectsFromArray:affectingKeys];
    }
    return keyPaths;
}

再来看一次运行结果

Main

小主,按键盘右方向键 → 翻页可以跳过片头呢

  

上一篇:KVO进阶(四)

  

下一篇:KVO进阶(二)

  

本文标题:KVO进阶(三)

原文链接:http://i.she.vc/28179.html

和本文相似的内容:

点击排行