propertyってどう使うのか?
setter/getterを自動的に生成してくれるという簡単な覚え方をしてます。
例えば以下のようなコードを
- (int)hoge; - (void)setHoge:(int)hoge;
こんな感じでコードの省略ができる
@property (readwrite) int hoge;
※注意点
objective-cではgetterには'get'を頭につけない。setterには'set'をつける。(propertyを使うと意識する必要なくなるが・・・)
@interface MyClass : NSObject { NSString *value; } @property(copy, readwrite) NSString *value; @end @implementation MyClass @synthesize value; @end
@synthesizeを宣言すると属性に応じたアクセサが自動的に生成される。調査が足らんので詳しくは後日。。。
以下備忘録
属性 | 説明 |
---|---|
retain | 代入時にオブジェクトに対してretainを呼び出す必要があることを指定します。この属性はObjective-Cオブジェクトに対してのみ有効です (Core Foundationオブジェクトに対してはretainは指定できません。詳しくはCore Foundationを参照してください)。 |
readwrite | プロパティを読み取り/書き込み可能として扱うべきであることを示します。これはデフォルトで適用されます。@implementationではgetterとsetterの両方のメソッドが必須であり、@synthesizeを使う場合はgetterメソッドとsetterメソッドが合成されます。 |
readonly | プロパティが読み取り専用であることを示します。デフォルトは、読み取り/書き込みが可能です。ドット構文を使って値を代入しようとすると、コンパイラエラーが発生します。@implementationではgetterメソッドだけが必須であり、@synthesizeを使う場合は、getterメソッドだけが合成されます。 |
assign | setterで単純代入を使用することを指定します。これはデフォルトで適用されます。このキーワードを使う場合、アプリケーションはガーベジコレクション(GC)を使っていないと、単純代入は適切な振る舞いではなくなるためコンパイラ警告が発生します。GCでないアプリケーションの場合は、オブジェクトへの警告を避けるために、格納方法の属性の1つを明示的に指定する必要があります。GCを使わないアプリケーションで変数がNSCopyingプロトコルを採用していると、その状況でのassignの使用は通常は適切でないため、この属性に対して警告が発生します。 |
copy | 代入にオブジェクトのコピーを使用することを指定します。コピーは、copyメソッドを呼び出すことによって作成されます。この属性はオブジェクト型に対してのみ有効であり、その場合はNSCopyingプロトコルを実装する必要があります。 |
nonatomic | 合成されるアクセサが非アトミックになるように指定します。 |