KVO更新通知の軽減方法
KVOの更新通知をどのように出せばいいのか悩んでいます
@interface aClass : NSManagedObject
@property (nonatomic, retain) NSNumber *attr0;
@property (nonatomic, retain) NSNumber *attr1;
@property (nonatomic, retain) NSNumber *attr2;
@property (nonatomic, retain) NSNumber *attr3;
@property (readonly) NSNumber *calculatedAttr;
@end
@implementation aClass
@dynamic attr0, attr1, attr2, attr3;
+ (NSSet *)keyPathsForValuesAffectingCalclatedAttr
{
return [NSSet setWithObjects:@"attr0",@"attr1", @"attr2", @"attr3", nil];
}
- (NSNumber *)calculatedAttr
{
return @(self.attr0.integerValue + self.attr1.integerValue + self.attr2.integerValue + self.attr3.integerValue); // 実際はもう少し複雑です
}
@end
このようなクラスのオブジェクトが複数ありその中の任意の6個を選択します。 そして、6個のcalculatedAttrの合計値をUIに表示しています。 つまり内部的には6*4=24個のデータが関係した値です。
現在はNSArrayControllerを使用し、なおかつKVOの自動通知に任せているのですが、通知の頻度が高すぎ、calculatedAttrの計算が過剰に行われるため、これを軽減できないかと考えてます。
しかし、24個の値は1個だけ変更されることもあれば、24個すべて同時に変更されることもあるため、どれか1つのみを監視対象として残し、他ものは変更通知を行わないようにすることも出来ません。
なにかよい知恵はないでしょうか?