KVO更新通知の軽減方法


KVOの更新通知をどのように出せばいいのか悩んでいます

[code]

    @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
    
[/code]

このようなクラスのオブジェクトが複数ありその中の任意の6個を選択します。 そして、6個のcalculatedAttrの合計値をUIに表示しています。
つまり内部的には6*4=24個のデータが関係した値です。

現在はNSArrayControllerを使用し、なおかつKVOの自動通知に任せているのですが、通知の頻度が高すぎ、calculatedAttrの計算が過剰に行われるため、これを軽減できないかと考えてます。

しかし、24個の値は1個だけ変更されることもあれば、24個すべて同時に変更されることもあるため、どれか１つのみを監視対象として残し、他ものは変更通知を行わないようにすることも出来ません。

なにかよい知恵はないでしょうか？




色々な案をありがとうございます。  
完全に合致する方法はおそらくないと思われます。  
あきらめました。




上記の仕様に加えてcoredataということなので、どうしようもないような気はします(faultもありますし)。

これがNSManagedObjectでなければ、attr0~3を配列にまとめるとか、setterを上書きして以前の値と変わっていた時のみcalculatedAttrを計算、という手も使えそうではありますが……。

