takeRetainedValue()
→ 呼び出した関数内で値が retain されている場合こちらを使う。Swift 側でアンラップする際には retain しないでメモリマネジメントに加える。

takeUnretainedValue()
→ 呼びだした関数内で値が retain されていない場合こちらを使う。Swift 側でアンラップする際 retain を行いメモリマネジメントに加える。

どっち使えばいいんだよ

とりあえず takeRetainedValue() を使い、問題が起こらないならそれでよい? もしヌルポが起これば takeUnretainedValue() に変えてみるとか?

Swift の参照カウンタのチェックポイントは関数脱出時のようなので、関数内で完結する分には常に takeRetainedValue() で取り出しても問題がおきない (勝手に解放されない) と思うが、よくわからない。

  1. トップ
  2. tech
  3. Swift takeRetainedValue() or takeUnretainedValue
▲ この日のエントリ