P122-137 保持の循環と弱い参照
ARC使用時の話
保持の循環
オブジェクトの参照関係が循環すると、その循環の中のオブジェクトをうまく解放できない。
ライフタイム修飾子 __weakを使って解決する。
ライフタイム修飾子
- __weak 弱い参照
- __weakをつけた変数にオブジェクトを代入してもオブジェクトのリファレンスカウンタが増減しない。
- __weakをつけた変数が参照しているオブジェクトが解放されたとき、変数にnilが代入される(ゼロ化)。ぶらさがりポインタができなくて済む。
- 弱い参照でしか参照されないオブジェクトはすぐに解放されてしまう。継続して使うには他の強い参照でオブジェクトを参照する必要がある。
- __autoreleasing
よく分からない。
- __unsafe_unretained
- ゼロ化をしない__weak。普通のC言語のポインタ変数と同じ。
- __weakが使えないクラスで使う。
- 構造体の中でオブジェクトを使いたいときにつける。
- 安全でない。
コンパイラに対する指示
メソッドファミリの命名規則に従ってないメソッドに付けて属性を変えられる。名前変更が推奨されている。
- NS_RETURNS_RETAINED 返り値にオーナーシップを伴う。init, copyと同じ。
- NS_RETURNS_NOT_RETAINED 返り値にオーナーシップを伴わない。
難しかった。まだよく分かっていない所多数。
参照が循環すると言うのも今まで意識してこなかったので、まだピンと来てない。
- 作者: 荻原剛志
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2011/12/28
- メディア: 大型本
- 購入: 14人 クリック: 85回
- この商品を含むブログ (13件) を見る