2012-01-09 9 views
5

私は@synthesizeにivar名を指定することは、重複しているとか、または良い方法であると考えていますか?

@synthesize name = _name; 

ような教師は、明示的に常に問題を回避するために@synthesizeを使用するときにIVAR名を指定すると言うStanford iTunes U course on iOS (cs193p)を、見てきた。しかしCocoa documentation on declared propertiesをブラウズしながら、私は本当にでこれを見て、またはしていませんその他のサンプルコード。

これは私に質問をもたらします、なぜこれが必要ですか? @synthesizeをプロパティ名で使用するだけで十分ですか?これが避けることができる特定の問題はありますか?

+0

[シンセサイザーivarName = _ivarNameの慣例、優先度またはパフォーマンスの可能な複製](http://stackoverflow.com/questions/8333929/synthesize-ivarname-ivarname-convention-preference-or-performance) –

答えて

6

この理由は、ivarsが直接アクセスされないようにしてメモリ管理の問題を引き起こすためです。例:

正しい:self.name = newName; 誤:プロパティのname = newName;

ゲッターとセッターは、メモリ管理が正しく処理されていることを確認してください。 ivarsにアクセスするには、明示的に先頭のアンダースコアを入力する必要があります。これは偶然には非常に困難です。イヴァールに直接アクセスする唯一の時間は、init,dealloc、ゲッターとセッターです。

0

@synthesize name = _name;@synthesize name;以外の意味を持つため、間違いなく冗長ではありません。あなたのイヴァールの名前をあなたの物件と違うかどうかは、主に個人的な好みの問題です。両方の変種は完全に良好です。

+0

Objective-Cの初心者で、私は個人的な好みはありません。 @synthesize name = _name;という長い名前を使用する理由は何ですか?私がカスタムゲッター/セッターを持っていないと、実際に何か変更されますか? –

1

ivar名を指定しない場合は、プロパティと同じ名前が使用されます。したがって、これら二つは等価です:

@synthesize name; 
@synthesize name = name; 

あなたがやっているすべてはname = nameある場合は、[はい、それは完全に冗長です。

人々がname = _nameのようなものを指定する理由は、ivarとプロパティに別の名前を使用するためです。これを行う理由の1つは、プロパティとivarの間で混乱することはありませんが、率直に言って、違いが明確でない場合、この小さな微調整ではあなたを救うことはできません。

+1

私はそれが間違っているのではなく、アイバールの使用を防ぐために、人々が「混ざり合っている」ためだと確信していません。 –

関連する問題