2011-08-08 24 views
1

可能性の重複:文字列を@synthesizesといくつかの処理を行い@implementationとObjective-C @interfaceの角括弧内に@propertyオブジェクトを指定する必要がありますか?

@interface { 
    NSString * someString; 
} 

@property (nonatomic, retain) NSString * someString; 


Properties declared as instance variables too?

のは、私のようなObjective Cのクラスのインタフェースを持っているとしましょう他のもの。

私が知りたいのは、そのNSString * someStringオブジェクトのポインタ宣言を大括弧内に入れる必要があるかどうかです。 (別名として、変数が定義されている角かっこの間には特別な用語がありますか?)NSString * someString宣言を省略するとコードが正常に動作し、@property行にはすべて同じ情報がありますタイプ。したがって、変数宣言をする必要がない場合、なぜオプションが存在するのでしょうか?変数宣言と@property宣言に矛盾する型があるとどうなりますか?

+0

...知らないが、私の質問は正確に質問ですそこに尋ねられた。 – Tneuktippa

答えて

1

@synthesizeは、あらかじめ定義されていない変数を作成するため、ほとんどの場合、必要ではありません。また、あなたが使用して、同様@synthesizeを使用して独自の変数を作成することができます。

@synthesize aVar = _theVariableName; 
getterメソッド( aVar)、setterメソッド( setAVar)、そしてあなたが使用できる _theVariableNameを名前付きインスタンス変数を作成します

メモリ管理の目的。

@dynamicが同じことをするでしょう、そしてあなた自身のセッターとゲッターを実装した場合、私はあなたが宣言が必要だと思う場合は、私はああ、私の悪い

+2

@dynamicは何も作成しません。実行時に実装が提供されることをコンパイラに通知します –

+1

Joshuaは言ったように、 '@dynamic'は純粋に"これは実行時に存在する "と言うことです。自分で実装するときにivarが必要かどうかは、実装の詳細です。時にはあなたがする、時々あなたはしません。 – bbum

+0

これは、「レガシー」ランタイムでは機能しないことを指摘しておきます。 – Perception

関連する問題