1

例 iVar foo

@property (nonatomic) NSString* foo; // inside .h

オプション1

@Synthesize foo; //Inside .m 

foo = [[NSString alloc] init]; // viewDidLoad method

オプション 2

@Synthesize foo; //Inside .m 

self.foo = [[NSString alloc] init]; // viewDidLoad method

オプション 3

@Synthesize foo = _foo; //Inside .m 

_foo = [[NSString alloc] init]; // viewDidLoad method

なんで?

非常に多くの場所で、Obj - C でオブジェクトを初期化するさまざまな方法を持つコードを見てきましたが、どれがベストプラクティスですか?

4

2 に答える 2

4

この点で、ARC は MRC と同じです。

これらすべてが で行われるように指定しましたviewDidLoad。その場合は、setter (オプション 2) を使用します。

初期化子で初期化/設定する場合は、直接アクセスを使用します。基本的な理由は、イニシャライザ(例: -init) に部分的に初期化されたオブジェクトがあるためです。初期化中は、クラスが正しく機能するために必要または期待する変数の初期化に集中する必要があります。同様に、部分的に構築された状態でアクセサーを使用するときに発生する可能性のある副作用を回避する必要があります。

完全に構築された状態 (例: viewDidLoad) では、オブジェクトのインターフェイスで指定されているように、正しい動作のために実装をアクセサーに委譲する必要があります。


追加資料:

プロパティの初期化、ドット表記

ARC の init メソッドで self.property を参照する必要がありますか?

なぜ ivar を使用するのでしょうか。

于 2012-08-20T09:30:18.773 に答える
1

この3つの違いを理解して、どちらが自分に合っているかを判断する必要があると思います。

オプション 1: ここでは、初期化中にシンセサイザー メソッドを使用していません。したがって、.h および .m でプロパティ シンセサイザーを宣言する必要はありません。

オプション 2: ここでは、プロパティ シンセサイザーを使用しています。ただし、インスタンスと実際のインスタンス変数にアクセスするためのメソッドの名前は同じです。

オプション 3: ここでも、プロパティ シンセサイザー メソッドを使用していません。ここで、foo はメソッドの名前で、_foo は実際のインスタンスです。

私の意見では、3番目が良いです。あなたは違いがあるので、どちらがあなたにとって良いかを決めることができます.

于 2012-08-20T09:56:48.787 に答える