前言
进阶三回顾前两篇文章,共分两部分。第一部分写个奇怪的小程序,用来说明KVO的监听和被监听对象的可变性,第二部分接着上篇写KVO的依赖设置
正文
part 1
这部分直接贴代码,有疑问的地方欢迎提问(内部有循环引用没有解除)
part 2
进阶二中提到过KVO的内部通知,很容易想到是否可以在某个方法中设置多个属性通知从而达到依赖的目的。
其实如果进入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;
}
再来看一次运行结果