一般的に、手動で書き込む必要は@synthesize
もうありません。あなたの例では、あなたが書くなら
@property (assign, nonatomic) CGFloat someFloat;
コンパイラは自動的にそれを合成します。これはあなたが書くのと同じです
@synthesize someFloat = _someFloat;
したがって、をself.someFloat
使用して、実装ファイル内のivarを介してプロパティにアクセスしたり、ivarにアクセスしたりできます_someFloat
。
ただし、手動で次のように合成する場合
@synthesize someFloat;
コンパイラーは、...というタイトルのバッキングivarを自動的に作成しsomeFloat
ます。これにより、ゲッターを介して変数にアクセスできますself.someFloat
(つまり、[self someFloat]
呼び出しと同等です)。
someFloat
または、実装内のどこかを使用するだけでivarにアクセスできます...
一般に、このように合成することはお勧めしません。ゲッターを使用して変数にアクセスしようとしたときに、誤ってivarを使用する可能性が非常に高いためです。
ルールの例外
ただし、場合によっては、コンパイラーは変数の合成と混同されることがあります。たとえば、のサブクラスであるクラスがあるNSManagedObject
場合でも、手動で記述する必要があり@synthesize
ます(もちろん、実際にプロパティを合成したい場合は...おそらくそうではありません...)。
この理由は2つあります。(1)コンパイラはこれらのプロパティをまだ十分に理解していないようです(または、少なくとも私が作業した場合は理解していません)。(2)何度も実際には、サブクラスのプロパティは必要ありません...むしろ、代わりにプロパティを使用する必要があります(したがって、サブクラスマジックの要件に従って、実行時にゲッター/セッターが生成されます)。@synthesize
NSManagedObject
@dynamic
NSManagedObject