私の教授は、Xcode4.6で次のように呼び出していることを何度か明示的に教えてくれました。
@synthesize suit;
呼び出しと同じです:
@synthesize suit = _suit;
その中で、Xcodeはivarを作成し、アンダーバーの命名規則で名前を付けます(例で@property suit
は、という名前のivarを取得します_suit
)
しかし、私はドキュメンテーションを見ていて、AppleDocumentationEncapsulatingDataでこの一節を見つけました
重要:次のように、インスタンス変数名を指定せずに@synthesizeを使用する場合:@synthesize firstName; インスタンス変数には、プロパティと同じ名前が付けられます。この例では、インスタンス変数もアンダースコアなしでfirstNameと呼ばれます。
これは私の教授と直接矛盾しているようです。:(
これが私が知っていることです。Xcode 4.6では、@property
宣言されたものはすべて@synthesize
自動的に-edされるため、を呼び出す必要はありません@synthesize
。Xcodeに自動合成を許可すると、ivarアンダーバー名(_suit
)が使用されます。ただし、カスタムのゲッターとセッターを実装する場合は、@synthesize
明示的に呼び出す必要があります。
私の質問はこれです。カスタムのゲッターとセッターがあり(私が持っているように)、呼び出す必要がある@ synthesize
場合、名前を指定しない場合、Xcodeはデフォルトのアンダーバー命名スキームを使用しますか?
たとえば、私がこれを呼び出すとき:
@synthesize suit;
Xcodeは基礎となるivarに名前を付けますsuit
か_suit
?
私の簡単なテストとドキュメントを読むと、私の教授が思っているように@synthesize suit;
なり@synthesize suit = suit
、そうではないように見えます。@synthesize suit = _suit
私は完全な新人で、プロパティに頭を巻いて合成しているだけなので、あなたの助けが必要です。
また、これを自分でテストしたり、ドキュメントで実際の答えを見つけたりするにはどうすればよいですか?ありがとう。