@propertyの属性
@property (strong, nonatomic) NSString* hoge
とかの ()の中に書くやつ。
ARC環境下だと参照カウントの存在を忘れがちですが、プロパティとかの属性に気をつけないとたまにはまります。私の場合、まだまだひよっこでiOSのメモリ管理に慣れていないため嵌りまくりです。
ということで、プロパティの属性。特にメモリ管理系のやつがやっかいなのでざっくりとメモしておきます。
書き込み可能性
- readwrite getter/setter両方作られる
- readonly getterしか作られない
メモリ管理
- unsafe_unretained オブジェクトではないプロパティ用。単なる代入で、オブジェクトの場合も参照カウントを増やさない。 古い書き方だと assign
- strong 渡されたオブジェクトの所有権を獲得する(強い参照を持つ) 古い書き方だとretain
- weak 渡されたオブジェクトの所有権を獲得せず、元のオブジェクトが解除されると自動的にnilになる
- copy 渡されたオブジェクトのコピーを保持。そのオブジェクトの所有権を獲得する。
Xcode4.3以降でARCを有効にした場合、オブジェクトのデフォルトはstrong(retain), プリミティブのデフォルトがunsafe_unretained(assign)
delegateプロパティが unsafe_unretainedだったりするので要注意。
一意性
- atomic 一意性を保証する
- nonatomic しない
nonatomicで全く問題ないらしい