3

メンバー変数を持つobjective-cクラスがあります。それぞれのゲッターとセッターを作成しています。主に学習目的で。私のセッターは次のようになります。

- (void) setSomething:(NSString *)input {
 something = input;
}

ただし、過去に使用したC ++およびその他の言語では、のthisようなポインターを使用してメンバー変数を参照できますthis->something = input。Objective-cでは、これはとして知られていselfます。それで、Objective-cでそのようなことが可能かどうか疑問に思いましたか?このようなもの:

- (void) setSomething:(NSString *)input {
 [self something] = input;
}

しかし、それはのゲッターを呼び出すでしょうsomething。ですから、よくわかりません。だから私の質問は:

セルフポインタを利用して割り当てを行う方法はありますか?

もしそうなら、どのように?

これは良い習慣ですか、それとも悪ですか?

ありがとう!

4

2 に答える 2

4

はい、C ++と同じ構文を使用しますが、 :selfの代わりにthis

self->something = input;
于 2010-12-27T21:49:07.910 に答える
2

あなたが使用するとき、あなたは暗黙のうちに「自己」を効果的に使用しています...

something = input;

...ローカルの「何か」変数がない場合。(つまり、明示的な「自己」を追加する必要は実際にはありません。一般的に、追加する必要はありません。)

とは言うものの、コードサンプルは入力を保持していないので、おそらく期待どおりに機能しないでしょう(NSStringの場合、クラッシュせずに長くは続かないでしょう)。

そのため、本当に独自のセッターを作成したい場合(Objective-Cプロパティ/合成の設定ははるかに面倒ではありません)、次のようなものを使用する必要があります。

- (void) setSomething:(NSString *)input {
    if(something != input) {
        [input retain];
        [something release];
        something = input;
    }
}
于 2010-12-27T21:54:08.293 に答える