プロパティ変遷まとめ
なんども忘れるので一回まとめときます
・昔
@interface A : NSObject {
int member; //インスタンス宣言
}
@property (retain) member; //プロパティ宣言
@end
@implementation A : NSObject {
@synthesize member; //セレクタ(インスタンス、アクセサ宣言)
@end
まず基本はインスタンスを宣言して、それをオプション付きで@property宣言し、@synthesizeでゲッターやセッターを自動生成するというものでした。
このときインスタンスがなくても@synthesizeでインスタンスが自動生成されますが、インターフェースで宣言されていないので、外部から直接アクセスすることはできません。
・今
Xcode4.4くらいから@synthesizeを宣言しなくても@propertyでインスタンスやアクセサを自動生成するようになりました。なので
@interface A : NSObject
@property (retain) member;
@end
だけで全て生成されます。このとき@sythesize無しで自動生成されたインスタンス名はプロパティ名の前にアンダーバーがついた、_memberになります。(明示的に@synthesizeしたときはつきません)
ちなみにですが
B = A.member としたときは B = [ A getMember ];
A.member = B としたときは [ A setMember : B ];
が内部で呼ばれています。