3

私は数か月間iOSで遊んでおり、常に@synthesizeを使用して@propertyの「セッターとゲッターを作成」しています。しかし、いくつかのチュートリアルでは、@synthesize param = _param をよく見かけますが、その意味がよくわかりません。

For example: in .h file

@property (nonatomic, retain) NSString *param1;
@property (nonatomic, retain) NSString *param2;

in .m file

@synthesize param1; //this is what I like to do
@synthesize param2 = _param2; // this is what 'experienced' programmer does

私の習慣から、このインスタンスを取得するために self.param1 または単に param1 を使用できますが、違いはありますか?

他の人からは、他のアプローチの代わりに _param2 を使用しているようです。ゲッター/セッターと関係があることは知っていますが、まだよくわかりません。

誰かがその違いと長所/短所を説明できますか?

どうもありがとう。

4

2 に答える 2

8

使用するとき

@synthesize param2 = _param2;

インスタンス変数に直接アクセスするために別の名前を使用していることを意味します。

(新しい XCode バージョンでは、自分で合成を指定しない場合、XCode はそれと同じものを作成します)

使用する場合:

_param2

インスタンス変数に直接アクセスしています。

使用する場合:

self.param2

セッター/ゲッターを介して変数にアクセスしています。これらのセッター/ゲッターは、設定したプロパティを使用して定義されます。

経験則として、init メソッドで ivar に直接アクセスし、残りのクラスでは self を使用します。

詳細については、次のリンクを参照してください。

Objective-C でのデータのカプセル化

于 2013-09-20T11:03:19.477 に答える
2

@synthesize param2 = _param2;基になるインスタンス変数に別の名前を使用します。長所は、誤って簡単に ivar にアクセスしないことです。

最近では自動的に合成され、2 番目のバリアントが使用されるため、@synthsizeすべて一緒に省略して and を使用self.param_paramます。

于 2013-09-20T11:03:44.947 に答える