Objective-C の現在のバージョンでは、 と を使用して ivar を宣言するための公式の標準とベスト プラクティスは@property
何@synthesize
ですか? このトピックに関する投稿やリソースはたくさんありますが、それらのほとんどは 1、2 年前のものとはかなり時代遅れです。私は最近、OOP のカプセル化の原則が破られないように、クラスの実装のステートメント ブロックで ivar のみを宣言することを学びましたが、この日と年齢で ivar を宣言することさえ必要ですか? 実行する場合の可能なユースケースは何ですか:
@interface MyClass()
@property (nonatomic) NSString* data;
@end
@implementation MyClass{
@private
NSString* _data;
}
@end
必要です?それをさらに進めるために、使用する必要はあります@synthesize
か? 私の理解では、を使用@property
すると、アクセサー メソッドとバッキング ivar の両方が自動合成されます。NSString* _data', I can still access
いくつかの実験を行ったところ、クラスの実装で _data' を宣言していないことに気付きました。つまり、ivar の宣言はスタイルの問題であり、プログラマーの裁量に委ねられるということですか? コードを要約して、実装のステートメント ブロック内のすべての ivar 宣言を削除@property
し、プライベート インターフェイスで使用することはできますか? そうでない場合、ivar を明示的に宣言することの利点と欠点は何ですか?
最後に、@dynamic
. 私が収集できることから、それはコンパイラーに対して、「コンパイラーさん、アクセサー メソッドを自動生成しないでください。実装が見つからなくても心配しないでください。実行時に提供します。 "。それはすべて@dynamic
のために使用されていますか、それ以上のものがありますか?
さまざまな意見があり、必ずしも正しい答えが 1 つではないように思われるため、これらすべてを明確にしたいと思います。さらに、Objective-C が成長し進歩するにつれて、これらの答えは変化するため、簡潔で最新のガイドがあると便利です。みんな、ありがとう!(また、より適切に表現したり、より明確にしたりできることがあれば、お知らせください)
編集:
要約すると、私が求めているのは次のとおりです。
1) 最新の Objective-C で ivar を宣言する必要はありますか? 2) を使用するだけで、ivar と対応するプロパティを宣言するのと同じ効果を達成できます@property
か? 3) @dynamic は何に使用されますか? 4) の使用を完全にやめることができますか、@synthesize
それとも適切な使用例はありますか?
必要に応じて賛成票と反対票を投じてください。