2

多くの場合、次のようなカスタム セッター構文​​を見つけます。

- (void)setParentCatalog:(Catalog *)parentCatalog {
    if (_parentCatalog != parentCatalog) { //???
        _parentCatalog = parentCatalog;
        [self refresh];
    }
}

なぜチェックする必要があるのですか?

if (_parentCatalog != parentCatalog)
4

4 に答える 4

1

ユースケースに依存する決定です。このガードの背後にある考え方は、不要な作業を防ぐことです。

非常にコストのかかる操作を開始したと想像すると、[self refresh]毎回それを実行するのは気が進まないでしょう。したがって、オブジェクトが実際に変更されたときにのみ行うと、作業を節約できます。

もちろん、これはあなたが探している動作である可能性があります。その場合、[self refresh]呼び出しをガードの外に置く必要があります。

すべてのコード例と同様に、実装のトレードオフを検討する価値があることがわかります。そうすれば、ケースで必要なものをより適切に決定できます。

于 2013-04-04T08:39:02.090 に答える