0

私はプロパティの使用について本当に混乱しています。私がこれを宣言する場合

@property (非アトミック、強力) NSString* aString;

これの違いは何ですか

1.@synthesize aString = _aString

2.@synthesize aString;

使用したい場合、次の違いは何ですか:

3. anOtherString = aString;

4. anOtherString = self.aString;

5. anOtherString = _aString;

_aString が ivar であることはわかっていますが、問題は 1,2,3,4,5 の組み合わせです。

たとえば、2 と 4 を使用する場合、anOtherString またはそのコピーへの参照を渡しますか? 私は通常 2 と 4 を使用しますが、それが参照を渡すための最良の選択ですか?

4

2 に答える 2

1

宣言を使用する@synthesizeと、ゲッター/セッターが生成されます。@synthesize宣言を使用する@synthesize aString = _aStringと、getter/setter メソッドがsetAStringandを使用するようになりaStringます。というプライベート変数を作成しています_aString。これは、クラス内で、この変数を呼び出して取得できることを意味します。

NSString *tempString = _aString;

また

NSString *tempString = self.aString;

後者は、生成された getter メソッドを使用して を取得しますaString

次の方法を使用して変数を設定することもできます。

_aString = @"";

また

self.aString = @"";

後者は、生成されたセッター メソッドを使用します。これは非常に重要です。なぜなら、プロパティを保持 (強力になりました) またはコピーとして宣言した場合、セッター メソッドは、認識していないロジックを実行するからです (強力/コピー/弱いプロパティを確認してください)。基本的に、強力なプロパティがあり、生成されたセッターを使用する場合、コードはその変数に対する以前の参照を解放し、変数に割り当てているものへの強力な参照を作成します。

個人的には、弱参照でない限り、ゲッター/セッター アプローチを常に使用するようにしています (それなら問題ありません)。@synthesize aString = _aString必要に応じてメソッド パラメーターに名前を付けることができるように、通常は常にこのアプローチも使用しaStringます。名前の競合を避けるのに役立ちます。

何らかの形で明確にすることができるかどうか教えてください。

于 2013-01-02T15:48:13.100 に答える
1

あなたの答えはここにあります:

1.@synthesize aString = _aString

回答: プロパティ名は aString ですが、エイリアス _aString を作成しています。これで、aString にアクセスできるようになりました。アクセサーは _aString でのみ使用できます。Xcode4.4 以降、このステートメントはデフォルトで付属しています。

2.@synthesize aString;

回答: これは、プロパティを合成する Objective-c の基本的なスタイルです。Xcode4.4 以降、このステートメントは上記のステートメントをオーバーライドします。

3.anOtherString = aString;

参照変数/エイリアスによってプロパティにアクセスしています。

4.anOtherString = self.aString;

アクセサーを使用してその値を取得しています。

5.anOtherString = _aString;

プロパティ自体にアクセスしています。

I usually use 2 and 4 is that the best choice for passing a reference ?

回答 : これは、自己として行うには良い方法です。クラスを KVC 準拠にします。

于 2013-01-02T16:53:00.963 に答える