LoginSignup
13
20

More than 5 years have passed since last update.

[図解]SwiftでARCのメモリ解放の仕組みを理解するために実施したこと(weak版)

Last updated at Posted at 2019-04-01

はじめに

ARCのメモリ解放の仕組みを、インスタンスの参照関係を操作可能なプログラムを作って動作確認を行って実際に確認してみました。
その結果を図解でまとめます。

関連記事

[図解]SwiftでARCのメモリ解放の仕組みを理解するために実施したこと(unowned版)
[図解]SwiftでUIAlertControllerが何故循環参照するのかを理解するために実施したこと

環境

Xcode 10.1
Swift 4.2

作成したプロジェクト一式

https://github.com/sakamotoyuya/proj1
スクリーンショット 2019-04-02 2.10.04.png

このプログラムは(1)から(5)のメモリを以下の参照関係となるように作成して、いずれかのメモリをnilにしたとき、ARCのメモリ解放がどう動くのかを確認できるものとなっています。
色々試してみてこんな感じで動いたというのを図解でまとめました。

参照関係の図

スクリーンショット 2019-04-02 1.35.23.png

(2)にnilを入れたときのARCの動作

スクリーンショット 2019-04-02 13.55.49.png
スクリーンショット 2019-04-02 13.55.55.png
スクリーンショット 2019-04-02 13.56.01.png
スクリーンショット 2019-04-02 13.56.06.png

(3)にnilを入れた時のARCの動作

スクリーンショット 2019-04-02 13.56.11.png
スクリーンショット 2019-04-02 13.56.17.png
スクリーンショット 2019-04-02 13.56.23.png

(1)にnilを入れた時のARCの動作

スクリーンショット 2019-04-02 13.56.28.png
スクリーンショット 2019-04-02 13.56.37.png
スクリーンショット 2019-04-02 13.56.42.png
スクリーンショット 2019-04-02 13.56.47.png
スクリーンショット 2019-04-02 13.56.53.png
スクリーンショット 2019-04-02 13.57.00.png

ここまでやってみて

メモリをnilにしたからといってメモリが解放されないことがあるということが明確にわかりました。
今回の実験ではweakを含めた参照関係を作成して、ARCによるメモリ解放の流れを確認しました。次回はweak箇所をunownedに変えたらどうなるのか実験してみたいと思います。

13
20
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
20