@propertyと@synthesizeの違いは何ですか?
-
03-07-2019 - |
質問
私が理解しているように、@ synthesizeは実際にゲッターとセッターを生成しています。しかし、@ propertyは何をしていますか?クールな@synthesizeマジック関数のパラメーターを設定するだけですか?
解決
ヘッダーファイルに@propertyを記述します
@property float value;
は次と同等です:
- (float)value;
- (void)setValue:(float)newValue;
他のクラスの情報を取得します。クラスにはこのメソッドがあります
@synthesize phisicalyクラス実装でこれらのメソッドを作成
他のヒント
@property
は、名前をプロパティとして宣言します。つまり、ドット構文( object.value
)でアクセスできます。
@synthetize
は、ゲッターメソッドとセッターメソッドを作成するマクロと見なすことができます。 @synthetize
が入力されている場合でも、これらのメソッドをオーバーライドできることを知っておくと便利です。
@property
はゲッターおよび/またはセッターを宣言します
@synthesize
はそれらを実装します。
@propertyディレクティブで作成されたセッターおよびゲッターを実装するには、@ synthesizeディレクティブが必要であるという一般的な誤解がありますが、そうではありません。 @synthesizeなしで@propertyディレクティブを使用しても、セッター/ゲッターが生成され、ドット表記を使用できます。ただし、@ synthesizeディレクティブを省略すると、コンパイラーは、アンダースコア文字を先頭に持つ対応するインスタンス変数を生成します。プロパティmyVarのインスタンス変数は_myVarです。
先頭にアンダースコアを使用することは、プロパティとインスタンス変数を区別できるようにする一般的な規則です。プロパティとインスタンス変数が同じ名前を共有することも一般的です。これはデフォルトで@synthesizeが行うことです。