1日30分英語

習慣化するために

P122-137 保持の循環と弱い参照

ARC使用時の話

保持の循環

オブジェクトの参照関係が循環すると、その循環の中のオブジェクトをうまく解放できない。
ライフタイム修飾子 __weakを使って解決する。

ライフタイム修飾子

  • __weak 弱い参照
    • __weakをつけた変数にオブジェクトを代入してもオブジェクトのリファレンスカウンタが増減しない。
    • __weakをつけた変数が参照しているオブジェクトが解放されたとき、変数にnilが代入される(ゼロ化)。ぶらさがりポインタができなくて済む。
    • 弱い参照でしか参照されないオブジェクトはすぐに解放されてしまう。継続して使うには他の強い参照でオブジェクトを参照する必要がある。
  • __autoreleasing

よく分からない。

  • __unsafe_unretained
    • ゼロ化をしない__weak。普通のC言語のポインタ変数と同じ。
    • __weakが使えないクラスで使う。
    • 構造体の中でオブジェクトを使いたいときにつける。
    • 安全でない。

コンパイラに対する指示

メソッドファミリの命名規則に従ってないメソッドに付けて属性を変えられる。名前変更が推奨されている。

  • NS_RETURNS_RETAINED 返り値にオーナーシップを伴う。init, copyと同じ。
  • NS_RETURNS_NOT_RETAINED 返り値にオーナーシップを伴わない。


難しかった。まだよく分かっていない所多数。
参照が循環すると言うのも今まで意識してこなかったので、まだピンと来てない。

詳解 Objective-C 2.0 第3版

詳解 Objective-C 2.0 第3版