今更ながら、プロパティの属性について備忘録を残しておこうと思います。
プロパティの属性とは
プロパティを宣言する際につける、(strong, nonatomic)的なもの。
@property (strong, nonatomic) NSString *userName;
今回は、左側の「strong」などに関して、メモします。
これは、宣言したオブジェクトの値を解放するかをどうかを明示的に指定するもののようです。
種類としては、strongとweakの2つが主。
"strong" = 使わなくなっても値を保持する
"weak" = 使わなくなったあとは値がnullになる
みたいなニュアンスならイメージしやすいかもしれません。
ちなみに、属性指定をしなかった場合どうなるか。
属性を指定しない場合でも、エラーなどは出ずに動きます。
それは、「何も書かなかったら勝手にstrongになる」という設定があるからです。
ただ、最近「weak出なければいけないところが、strongになっていた」などのケースで起こるクラッシュがあったので、
今回は、細かい説明は省き、weakにした方がいい点のみをメモしておこうと思います。
weakで宣言している箇所
Outletで宣言するとき
→ 基本は宣言時に勝手に設定されるので問題なし
デリゲートプロパティを宣言するとき
→ strongで宣言するとメモリーリークが起こる可能性がある
ブロック処理のハンドラー内でselfを使うとき
→ ブロックとクラスの間で循環参照が起こってします可能性がある
以上です。