3

キー値コーディングに使用するのに適した方法はどれですか? MyControllerクラスに変数myVariableがあると仮定しましょう。どれが良いか、どれが悪いか、そしてその理由を誰かが書いてくれませんか。

1.

// Method in the MyController class.
- (NSString*)myVariableKVC {
    return NSStringFromSelector(@selector(myVariable));
}

[myController addObserver:self
               forKeyPath:[myController myVariableKVC]
                  options:NSKeyValueObservingOptionNew
                  context:nil];

2.

[myController addObserver:self
               forKeyPath:@"myVariable"
                  options:NSKeyValueObservingOptionNew
                  context:nil];

私の観点からは、最初の部分の方が優れています。ハードコードされた文字列はありません。Refactor -> Rename...を使用して名前を変更すると、名前が変更されます。

4

1 に答える 1

3

-Wundeclared-selector(Xcode 名: "Undeclared Selector", Xcode ビルド設定: ) という名前の警告を有効にしている場合GCC_WARN_UNDECLARED_SELECTOR、最初の方法では、セレクターの名前を (どこにも宣言されていない名前に) 変更すると、コンパイラから警告が表示されます。セレクターとして)、ご指摘のとおり、これにより、ハードコードされた/「魔法の」文字列がわずかに減少します。ただし、別の方法を用意する必要はありません。これを行うだけです。

[myController addObserver:self
               forKeyPath:NSStringFromSelector(@selector(myVariable))
                  options:NSKeyValueObservingOptionNew
                  context:nil];

この警告は、私が調べた Xcode プロジェクト テンプレートではデフォルトでオンになっていないため、このチェックが必要な場合は、プロジェクトに対してその警告を手動でオンにする必要があります。

その警告がなければ、最初のメソッドが別の関数呼び出しを発生させることを除いて違いはありません (そして、質問に表示されているようにセレクターを返す ObjC メソッドがある場合は ObjC メッセージが送信されます)。この警告はデフォルトでオンになっているように感じますが、状況が変わると思います。

于 2013-02-22T12:08:18.813 に答える