2012-02-27 6 views
12

インスタンス変数を作成せずにプロパティを追加しようとしています。これは可能ですか?あるいは、財産ではない方法で同様のことをすることができますか?インスタンス変数を持たないプロパティを追加しますか?

例:上記のコードで

@interface RandomClass() 
@property (nonatomic) int value; 
@end 

@implementation RandomClass 
@synthesize value = _value; 
// Here I override the default methods @synthesize 
-(int)value 
{ 
     return 8; // Actually I'm returning something more complex, so a "define" won't work 
} 
-(void)setValue:(int)value 
{ 
    self.someOtherValue = value; 
} 

、私はインスタンス変数_valueを使用していませんよ!変数を作成せずにこれを行う方法はありますか?

答えて

8

あなたはゲッター/セッターを自分で実装しているので、@synthesizeは役に立たないライン

@synthesize value = _value; 

を削除します。


@synthesizeは2つのジョブを処理します。最初の仕事は、プロパティがバッキングのivarに接続し、ivarがまだ存在しない場合に合成することです。 2番目の仕事は、ゲッター/セッターを合成することです。バッキング用のivarが必要ない場合や、getter/setterの実装を自分で提供している場合は、@synthesizeはまったく必要ありません。

+0

宣言されたivarに裏付けされているかどうかにかかわらず、プロパティを宣言する場合は、それに対して '@ synthesize'宣言または' @ dynamic'宣言を持たなければなりません。 OPにはおそらく '@dynamic'宣言があります。そして、その場合、コードで彼のコメントが何を言っているのか、彼はおそらく宣言されたivarは必要ないでしょう。 – kamprath

+0

これは私が探していたものです!よかった。ありがとう! – tomidelucca

+5

@claireware:逆に、もしコンパイラがメソッドが実装されているのを見ることができれば、 '@ dynamic'の必要はありません。 ["Property Implementation Directives"(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW9)を参照してください。 ):特定のコンパイラアクションをトリガするために '@Syntax'および' @Dynamic'ディレクティブを '@ implementation'ブロックで使用することができます。与えられた '@ property'宣言にはどちらも必須ではないことに注意してください。

関連する問題