3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「ViewControllerをたくさん重ねると、いかにもメモリに悪そう」ということをXcodeを使って視覚的に表現してみた

Last updated at Posted at 2020-03-18

1 はじめに

この記事は技術的な内容というよりは、実験系の内容になります。

ViewControllerを重ね合わせると、メモリに悪いというのは周知の事実ですが、視覚的に「いかにも悪そうだ〜」という記事は、私が探した限りでは見つけられなかったので掲載します。

2 試したこと

まず、最初に3つのViewControllerを用意します。
MakeManyVC.001.png

次にUIBUttonを用意して、下記のようなコードを書きます。
(UIButtonは省略します)

ViewCotrollerを一つ用意して、画面遷移する(firstVC→secondVC)
@objc func goSecondVC() {
        //secondVCを実体化させる
        let secondVC = SecondVC()
        //用意したVCへ画面遷移
        self.present(secondVC, animated: true, completion: nil)
       }
ViewControllerを一つ用意して、画面遷移する(secondVC→thirdVC)
@objc func goThirdVC() {
        //thirdVCを実体化させる
        let thirdVC = ThridVC()
        //用意したVCへ画面遷移
        self.present(thirdVC, animated: true, completion: nil)
       }
ViewControllerを1つ用意して画面遷移する(thirdVC→firstVC)
@objc func goFirstVC() {
        //firstVCを実体化させる
        let firstVC = FirstVC()
        //用意したVCへ画面遷移
        self.present(firstVC, animated: true, completion: nil)
       }

このコードでXcodeのシミュレターを立ち上げて、次々と画面遷移していきます。
MakeManyVC.002.png

動画だとこんな感じになります。
manyViewController.gif

これを7回繰り返すと、こんな感じにViewが現れます。
スクリーンショット 2020-03-18 20.53.00.png

これだけでも、
メモリをたくさん使っているように見えますね。

さらに画面遷移を重ねていきます。
スクリーンショット 2020-03-18 20.49.14.png

ここまでくると、明らかにメモリを使ってそうだというのがわかります。

 
ちなみに下記サイトがメモリに関してわかりやすく説明されていました。
https://wa3.i-3-i.info/word16066.html

3. メモリを圧迫しないためには

ViewControllerを消す必要があります。

例えば、thirdVCからfirstVCへ画面遷移するときに、このようなコードを書くことでViewControllerが破棄出来ます。
Swift 二つ前の画面に戻る方法を参考にさせていただきました。

2つ前の画面に戻って、ViewControllerを破棄する(thirdVC→firstVC)
@objc func dismissTwoVC() {
    //2つ前のVCへ戻り、子VC(secondVC,thirdVCを削除)
    self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)       }

イメージはこのようになります。
(間違っていた場合は、ご教授いただけますと幸いです)
MakeManyVC.003.png
MakeManyVC.004.png
 
 
こうすることで視覚的にも「メモリに良さそう」な実装になります。
スクリーンショット 2020-03-19 0.23.38.png

3
4
0

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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?