2012-02-13 3 views
2

私はここでストーリーボードチュートリアルを探していた:私は著者は、インタフェース部でメンバ変数を作成せずに名前と型を持つプロパティを作成したことに気づいたとき http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1プロパティは暗黙的にその名前と型のクラスメンバーを作成しますか?

。 これまでのところ、目的関数Cの@ property/@ synthesize宣言では、その名前と型のメンバ変数のgetter/setterのみが作成されていました。 変数が@ property/@ synthesizeで暗黙的に作成されたとは思わなかった。 クラスメンバーは暗黙的に作成されていますか? ない場合は、どのようにこのコードの動作ん:指定された名前のIVARが存在しない場合

@interface Player : NSObject 

@property (nonatomic, copy) NSString *name; 
@property (nonatomic, copy) NSString *game; 
@property (nonatomic, assign) int rating; 

@end 
+0

[ivar暗黙の作成で@propertyと@synthesizeを使用する]の可能な複製(http://stackoverflow.com/questions/6912188/using-property-and-synthesize-with-ivar-implicit-creation) –

+0

短い答え:はい、 '@ synthesize'は、プロパティと同じ名前のivarを作成します。 '@ property'宣言自体はそうではありません。これは明示的かつ明示的に述べられています(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163- CH17-SW9)。 –

+0

別の複製、おそらく少し良い:http://stackoverflow.com/questions/3238009/property-declaration-and-automatic-backing-storage-allocation –

答えて

3

はい、それは暗黙的に@sythesizeキーワードで作成されます。例えば、上記のproperiesを与えられた。また

@synthesize name; // Creates an instance variable called "name" 

...あなたはもはやあなたのクラスの@interfaceでアイバーズを指定する必要があることを意味しない

@synthesize name = _name; // Creates an instance variable called "_name" 

+1

本当に "暗黙の"ではない - ivarの作成は[記載されている目的](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW9) @ synthesize'キーワードを使用します。 –

+0

私は同意します。ドキュメントはそれを明示的に述べます。厳密に言えば、コード構文の観点から言えば、@synthesizeキーワードを使用して作成を「暗黙的」として記述します。 –

+0

小さなサイドノート:これは "現代的な" Objective-Cランタイムでのみ機能します。現代のランタイムは、64ビットOS XおよびiOSで使用されます。 32ビットOS Xでは、@合成されたプロパティに対しても、ivarsを明示的に宣言する必要があります。 –

関連する問題