使用场景:
例如用户有一个fullName属性,此属性被其他观察者观察。它需要依赖firstName和lastName属性。也就是说当用户设置firstName或者lastName的时候,它的fullName观察者需要得到通知。
这里强调的是多个属性的修改都会影响某一个属性,多改对一改,这里采用的一种依赖机制,fullName属性依赖多个key,用户只需要告诉KVO框架是如何依赖的即可。如何建立依赖关系
通过keyPathsForValuesAffectingValueForKey方法返回指定key所对应的依赖set集合,框架会自动建立fullName和另外两个属性的依赖。
+(NSSet*)keyPathsForValuesAffectingValueForKey:(NSString *)key
{
NSSet *keyPaths = [superkeyPathsForValuesAffectingValueForKey:key];
if ([key isEqualToString:@"fullName"]) {
NSArray *affectingKeys =@[@"lastName",@"firstName"];
keyPaths =[keyPaths setByAddingObjectsFromArray:affectingKeys];
}
return keyPaths;
}
对fullName进行观察, 当对lastName进行赋值的时候,观察代理也会被触发.
[self addObserver:self forKeyPath:@”p.fullName” options:NSKeyValueObservingOptionNew context:nil];
self.p.firstName = @”G”;
结果: keyPath = p.fullName, change = {
kind = 1;
new = “”;
}