インスタンス変数とプロパティの主な違いは、プロパティの場合、コンパイラが getter/setter メソッドのペアを自動的に生成することです。例えば:
@property (nonatomic) int value;
生成されます:
-(void)setValue:(int)i
{
value = i;
}
-(int)value
{
return self->value;
}
与えられた@synthesize
d。
Objective-C 1.0 に関する本を読んでいると、この機能が利用できないことに気付くでしょう。これは 2.0 の新機能で、ドット構文とも呼ばれます。これは主に複雑な getter/setter 構文のために導入されました。
この機能の利点は、コンパイラが自動的にペアを宣言したとしても、それをオーバーライドできることです。たとえば-(void)setValue:(int)i
、クラスのメソッドとして宣言したままで、動作をオーバーライドすることができます。これは、 の範囲に制限を設けるなど、検証のシナリオで役立ちますvalue
。
Java に関する限り、Objective-C には実際に@public
インスタンス変数の構文がありますが、それを使用しないのが習慣です。これは、getter/setter を介してプライベート変数を保護するという Java の概念に似ています。しかし、その主な目的 c は、getter/setter をオーバーライドして構文を最小限に抑えることです。
これは単なるプレビューです。詳細を知りたい場合は、 http://cocoacast.com/ ?q=node/103 または Objective-C 2.0 の書籍を参照してください。