はじめに
ARCのメモリ解放の仕組みを、インスタンスの参照関係を操作可能なプログラムを作って動作確認を行って実際に確認してみました。
その結果を図解でまとめます。
関連記事
[図解]SwiftでARCのメモリ解放の仕組みを理解するために実施したこと(unowned版)
[図解]SwiftでUIAlertControllerが何故循環参照するのかを理解するために実施したこと
環境
Xcode 10.1
Swift 4.2
作成したプロジェクト一式
https://github.com/sakamotoyuya/proj1
このプログラムは(1)から(5)のメモリを以下の参照関係となるように作成して、いずれかのメモリをnilにしたとき、ARCのメモリ解放がどう動くのかを確認できるものとなっています。
色々試してみてこんな感じで動いたというのを図解でまとめました。
参照関係の図
(2)にnilを入れたときのARCの動作
(3)にnilを入れた時のARCの動作
(1)にnilを入れた時のARCの動作
ここまでやってみて
メモリをnilにしたからといってメモリが解放されないことがあるということが明確にわかりました。
今回の実験ではweakを含めた参照関係を作成して、ARCによるメモリ解放の流れを確認しました。次回はweak箇所をunownedに変えたらどうなるのか実験してみたいと思います。