備忘録

開発でつまったところの備忘録.不定期に更新します.

プロパティ変遷まとめ

なんども忘れるので一回まとめときます

 

・昔

 

@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 ];

が内部で呼ばれています。