-2

を宣言するときは、次のNSStringようにします。

NSString * my_string; (in interface of my .h)

他のクラスからこの文字列へのアクセスを許可したい場合は、この方法でプロパティを追加します

property (nonatomic, strong) NSString *my_string;

そして私は合成を書きます

synthesize my_string; (in .m)

今、私はいくつかの質問があります:

  1. プロパティを使用する場合、インターフェイスで単純な宣言も使用する必要がありますか?
  2. プロパティとして使用する場合my_string、常にself.前に使用する必要がありますか?
  3. プロパティを使用する場合@synthesize、それぞれに記述する必要がありますか? (必要でない場合があることがわかったからです。
4

3 に答える 3

2

プロパティを使用する場合、インターフェイスで単純な宣言も使用する必要がありますか?

いいえ、通常は を使用するだけです@property(インスタンス変数が静かに追加されます)。

my_string をプロパティとして使用する場合、常に self を使用する必要があります。前?

する必要はありませんが、する必要があります。Usingself.はアクセサ メソッドを呼び出して、変数の内容を取得します。使用しない場合self.は、インスタンス変数に直接アクセスします。そのため、将来カスタム アクセサーを追加する場合は、リファクタリングが必要になります。

多くの場合、同じ変数を複数回再利用します。この場合、 を呼び出しますself.が、それを使用して、メソッド全体で使用するローカル変数を設定します (この方法では、アクセサーは 1 回だけ呼び出されます)。

プロパティを使用する場合、それぞれに @synthesize を記述する必要がありますか? (必要でない場合があることがわかったからです。

いいえ、コンパイラは次を追加します。

@synthesize propertyName = _propertyName;

これは、従うべき良いアプローチです (プロパティ名をインスタンス変数名から分離します)。

于 2014-02-19T16:03:27.340 に答える
0
  1. いいえ
  2. いいえ、自分自身を使用します。アクセサー メソッドを実行します。これを _my_string という名前で使用すると、変数に直接アクセスできます。プロパティに別の変数名が必要な場合は、その名前で synthetize を使用する必要があります
  3. いいえ、xcode は _my_string という名前の変数で自動的に合成します
于 2014-02-19T16:01:42.753 に答える
0

あらゆる場合にプロパティを使用することがますます適切になってきています。外部クラスに公開したくない場合は、.m ファイル内のヘッダー拡張内で「プライベート」プロパティを宣言できます。.h ファイルに name というプロパティがあるとします。

@property (nonatomic, strong) NSString *name;

このクラスのユーザーは、theVariable.name と言って name プロパティにアクセスできます。.m ファイル内では、このプロパティに self.name でアクセスする必要があります。ただし、次のように ivar にアクセスできます。

_name = @"John Smith"

これにより、プロパティがスキップされ、ivar に直接移動します。この場合、オーバーライドされたセッターがあった場合、それは呼び出されません。

プロパティを合成する必要がなくなりました。Xcode はこれを自動的に提供します。

@synthesize name = _name;
于 2014-02-19T16:02:35.053 に答える