Automatic Reference Counting

昨日に引き続き https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html を読む。

  • ARCは「ちょうどうまくいく」
  • 参照カウンタが適用されるのはクラスのインスタンスだけ
  • 強い参照の循環ができるとメモリが開放されない
  • 強い参照の替わりに、弱い参照か、所有されていない参照を使えば良い
  • 弱い参照はオプショナル型の 変数 var でなくてはならない
  • weak var tenant: Person?
  • 所有しない参照は参照されるインスタンスの寿命が同じか長いときに使われる
  • 非オプショナル型として定義される
  • deallocateされたあと、参照先にアクセスするとランタイムエラー
  • unowned let customer: Customer
  • お互いに参照しあうとどっちかがOptionalになる←非Optionalにするとコンストラクタでselfにアクセスする2段階初期化問題があるから
  • 暗黙にunwrapされたOptionalな型にする方法がある
  • var capitalCity: City!
  • クロージャはクラスのインスタンスと同様に参照型
  • クロージャ本体がselfにアクセスするとselfをキャプチャーする
  • そのクロージャselfが指すオブジェクトのプロパティ値に入れると、循環参照ができてしまう
  • 「キャプチャリスト」をつくることで、この問題を解決する
  • クロージャの開始{と(引数リスト)との間に
  • 引数リストと返り値方が型推論される時は、クロージャの開始{inとの間に
  • [unowned self, weak delegate = self.delegate!]
  • weak でキャプチャしたやつは Optional型

やっぱり参照カウンタからは逃れられなかったよ