2010-12-27 10 views
3

私は、メンバ変数を持つobjective-cクラスを持っています。私はゲッターとセッターをそれぞれ作成しています。主に学習目的のため。私のセッターは、次のようになります。Objective-Cメンバ変数の割り当てですか?

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

しかし、C++と私が過去に働いている他の言語で、あなたはthis->something = inputようthisポインタを使用してメンバ変数を参照することができます。対称-cでは、これはselfとして知られています。だから私はそれが客観的に可能なのかどうか疑問に思っていました。このような何か:

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

しかし、それはsomethingためにゲッターを呼び出します。だからわからない。だから私の質問は:

私は自己ポインタを利用して割り当てを行う方法はありますか?

もしそうなら、どうすればよいですか?

これは良い方法ですか、悪いですか?

ありがとうございます!

答えて

4

はい、それはthisの代わりにselfで、C++と同じ構文を使用します。

self->something = input; 
+4

:このよう

、あなた本当に独自のセッターを書きたい場合は(設定のObjective-C property/synthesizeたくさん少ない手間である)、あなたは次のようなものを使用する必要がありますしかし、 'self->'は必須ではなく、誰も実際にそのようなコードを書く人はいません。 – benzado

+0

実際、私たちの中には、オブジェクトメンバとローカル変数を区別するために、実際には「self」を使ってコンテキストをクリアするものがあります。 –

2

使用するときは、効果的に暗黙的に "自己" を使用している...

something = input; 

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

つまり、あなたのコードサンプルは入力を保持していないので、おそらく何もしませんあなたは期待している(まあ、NSStringの場合にはクラッシュすることなく長くない)。

- (void) setSomething:(NSString *)input { 
    if(something != input) { 
     [input retain]; 
     [something release]; 
     something = input; 
    } 
} 
+0

古い値を解放して新しい(保持された)値を割り当てることの間にオブジェクトの有効範囲がないことを避けるために、古い 'something'を自動解放するというイディオムがあります。 – Richard

+1

通常、文字列を保持する代わりに文字列をコピーする方が適切です。 – d11wtq

関連する問題