まず、最新バージョンのXcodeでは@synthesizeがまったく必要ないことに注意してください。省略できます(そして省略すべきです)。そうは言っても、これが作品の役割です。
@propertyアクセサーの宣言です。それは単なる宣言です。次の間にほとんど違いはありません。
@property (nonatomic, readwrite, strong) NSString *something;
対。
- (NSString *)something;
- (void)setSomething:(NSString)aSomething;
主な違いは、を使用してこれらのメソッドを宣言@propertyすると、コンパイラが実装を自動的に生成(合成)できることです。コンパイラに任せる必要はありません。あなたは完全に自由にsomethingそしてsetSomething:手で実装することができます、そしてそれは一般的です。ただし、手動で実装しない場合、コンパイラは呼び出されたivarを自動的に作成_somethingし、getterとsetterの適切な実装を作成します。
Xcodeの古いバージョンでは、@synthesizeキーワードを使用して自動生成を明示的に要求する必要がありました。しかし、それはもはや必要ありません。今日、使用する唯一の理由@synthesizeは、ivarに非標準の名前を付けたい場合です(決してそうしないでください)。
ここで重要な点は、メソッドsomethingとsetSomething:は単なるメソッドであるということです。それらには魔法のようなものは何もありません。それらは特別な「プロパティメソッド」ではありません。これらは、慣例により状態の一部にアクセスするための単なるメソッドです。その状態の一部は多くの場合ivarに保存されますが、そうである必要はありません。
さらに明確にするために: 「から名前が付けられたivarを返す」という意味でobject.somethingはありません。それは「それが何をするにしても、の結果を返す」という意味です。ivarの値を返すのが一般的です。_somethingobject[object something]
宣言を使用してすべての状態(内部および外部)を@property宣言する必要があります。また、ivarを直接宣言することは避けてください。また、メソッドとメソッドself.somethingを除いて、常にアクセサ()を介してプロパティにアクセスする必要があります。およびでは、ivar()を直接使用する必要があります。initdeallocinitdealloc_something