0

プロパティを持つオブジェクトがあり、一部のプロパティを変更すると、多くの計算が行われます。1 つのプロパティを変更してから別のプロパティを変更すると、計算が 2 回実行されます。すべての計算を1回行いたい。私は3つの解決策を見ます:

  1. メソッドを作成しcommitます。しかし、私は余分な方法をしたくありません。
  2. すべてのプロパティを変更するメソッドを作成します。やりたくないのと同じ理由。そして、将来さらに多くのプロパティを所有する場合はどうすればよいでしょうか。
  3. 遅延コミットの変更後に遅延を行います。これがどのような結果をもたらすかは本当にわかりません。このようなもの:

.

@interface TestObject : NSObject
@property (nonatomic, assign) float x;
@property (nonatomic, assign) float y;
@end

@implementation TestObject
{
    BOOL flag;
}

- (id)init
{
    self = [super init];
    if(self){
        flag = NO;
    }
    return self;
}

- (void)setX:(float)x
{
    _x = x;
    [self delayCommit];
}

- (void)setY:(float)y
{
    _y = y;
    [self delayCommit];
}

- (void)delayCommit
{
    if(flag == NO){
        flag = YES;
        [self performSelector:@selector(commit) withObject:nil afterDelay:0];
    }
}

- (void)commit
{
    flag = NO;
    NSLog(@"Do a lot of calculations....");
}

@end

3 番目の解決策は良い方法ですか? シンプルなインターフェースが欲しい、余分なメソッドは欲しくない。

4

3 に答える 3

0

持っているプロパティの数によっては、代わりにこれが機能する場合があります。

- (void)setX:(float)x y:(float)y
{
    _x = x;
    _y = y;
    [self commit];
}

ここでは、1 つのメソッド呼び出しで複数のプロパティを設定します。必要な値がすべて揃っていることがわかっているので、commit直接呼び出すことができます。

于 2013-09-30T07:55:08.717 に答える