34

アプローチ 1:

@interface MyController : UIViewController {
    UILabel *myText;
}

@property (nonatomic, strong) UILabel *myText;

アプローチ 2:

@interface MyController : UIViewController
@property (nonatomic, strong) UILabel *myText;

アプローチ 3:

@interface MyController : UIViewController {
    UILabel *myText;
}

この種のことについて話している記事をいくつか読んだことがありますが、どのアプローチを採用する必要があるのか​​ まだよくわかりません.

また、アプローチ1は古い方法だと誰かが言っていることもわかったので、ARCを使用したios SDK 6のベストプラクティスを知りたい.

プロパティを使用して変数を宣言することは、ゲッターとセッターを生成する簡単な方法であり、誰かがそれを使用することを提案したことを私は知っています。しかし、別のクラスから呼び出すための変数ではない場合に質問したいのですが、プロパティを使用する変数には必要ですか?インターフェイス内のプライベート変数として設定しますか?それとも、インターフェース内で宣言するだけの変数の方が良いですか? ベストプラクティスを学びたいので、これがばかげた質問である場合はご容赦ください。

さらに、一部の開発者は @synthesize をこのように記述します。

@synthesize myText=_myText;

しかし、次のように書く人もいます。

@synthesize myText;

私も違いを知りたいのですが、どちらが好ましいですか?

どうもありがとうございました!

4

2 に答える 2

58

最も近代的な方法1 :

  • 可能な限りプロパティを宣言する
  • iVar を個別に宣言しないでください2
  • @合成しないでください3
  • .h ファイルでできるだけ少ないプロパティを見つけます4
  • .m ファイルのクラス拡張子でできるだけ多くのプロパティを見つけます5

1 Xcode 4.5.2 以降。これのほとんどは 4.4 に適用され、一部は 4.2 (Snow Leopard で利用可能な最後のバージョン) ではコンパイルされません。これはプリプロセッサのものなので、少なくとも iOS5 まではすべて互換性があります (iOS4 ではテストしていませんが、それでも問題ないはずです)。

2 iVarプロパティを宣言しても意味がありません。プロパティの代わりにiVar を宣言したいというあいまいなケースがいくつかあると確信していますが、何も考えられません。

3 Xcode は、プロパティと同じ名前の iVar を作成し、先頭に _underscore を付けます。(めったに) 他の種類の動作が必要な場合は、手動で@synthesize property = someOtherName. @vikingosegundoは、 の使用例である動的 ivar に関するこの記事へのリンクを提供してい@synthesizeます。@RobNapierは、プロパティの独自のゲッター (読み取り専用) とセッター (読み取り/書き込み) を作成する場合に (奇妙なことに) 必要があるとコメントしています。この場合、プリプロセッサは iVar を生成しません。@synthesize iVar = _iVar

4インターフェースの一般的なルール: できるだけ空のままにします。メソッドが私用である場合、メソッドを宣言する必要はまったくありません。インターフェイス宣言なしでコードを動作させることができれば、それが道です。

5これは、@implementation の上に配置された、.m ファイル内の @interface ブロックです。

#TestClass.m

@interface TestClass()

//private property declarations here

@end

@implementation TestClass
...
于 2013-01-09T14:01:04.547 に答える
1

@synthesized プロパティの目次を参照して、わかりやすく整理するためにコメントできるようにしたい場合は、@synthesize を使用することもできます。

また、@synthesize を使用すると、プロパティにブレークポイントを設定し、値が変更されたときにトラップできます。

コンパイラがすべてをやってくれると、実際に起こっていることから遠ざかり、無知になってしまいます。ただし、すべての時間を自分で入力する必要がないのも良いことです。

于 2013-07-11T15:49:13.990 に答える