iOS

【Swift】MemoryLeakの簡単な確認方法

投稿日:2022年5月2日 更新日:

はじめに

こんにちは、suzukiです。前回の記事で循環参照について触れました。今回は問題の発見に役立ったツールについて簡単に紹介していこうと思います。
今回行いたいこととしては
①開発中のテスト
②テストコードの作成

テストの準備

①画面遷移を繰り返すことによりインスタンスの増加のチェック
上記のテストのため、前回のコードを元に簡単Storyboardを使い画面遷移を作成します。
ボタンをタップを契機に、画面遷移をできるようにしておきます。
・前回の記事のViewController
・後述のXCTAssertNoLeakのサンプルクラス

また下記のコードのコメントアウト行をテスト実行時に切り替えます。

②テストコードの作成
こちらのライブラリを利用します。
Unitテストとしてメモリーリークの確認が可能になるライブラリです。

ターミナルでProjectName.xcodeprojのあるディレクトリに移動し
$pod init
上記のコマンドで作成されるpodFileに下記を記述
pod 'XCTAssertNoLeak'
pod install等のコマンドを行うことによって利用可能です。

またサンプルコードの下記のクラスを利用しメモリリークした際の挙動を確認します。

開発中のテスト

今回はMemoryGraph機能を使っていきます。
使い方は簡単で実機やエミュレータでRunしている最中に下記のボタンをタップすることで開けます。

この機能では、プロジェクトが利用しているメモリの内容が表示でき
・不自然なインスタンス数になっているオブジェクトの確認
・オブジェクトのインスタンスを保持しているクラスの確認
などが可能です。
スクショの画像は実際に3回ずつ画面遷移した際のMemoryGraphです。

・ViewControllerクラスが3つ
・サンプルコードのButtonとLogicが3つ
存在していることが確認できるかと思います。また一部のインスタンスには警告マークが出ています。
警告マークのみをソートすることなども可能です。

テストコードの作成

ライブラリを利用することにより、XCTestをでLeakのチェックができるようになってます。
遷移っぽいテストも可能のようです。

実行すると下記のようなログとスクショが見れます。

Writing analzed variants.
/Users/macbook007/blog/LeakTests/LeakTestsTests/LeakTestsTests.swift:44: error: -[LeakTestsTests.LeakTestsTests testLeakTest] : failed – 1 object occured memory leak.
– self
/Users/macbook007/blog/LeakTests/LeakTestsTests/LeakTestsTests.swift:46: error: -[LeakTestsTests.LeakTestsTests testLeakTest] : failed – 2 object occured memory leak.
– self.button
– self.logic
Test Case ‘-[LeakTestsTests.LeakTestsTests testLeakTest]’ failed (8.396 seconds).
Test Suite ‘LeakTestsTests’ failed at 2022-05-02 04:25:28.406.
Executed 1 test, with 2 failures (0 unexpected) in 8.396 (8.397) seconds
Test Suite ‘LeakTestsTests.xctest’ failed at 2022-05-02 04:25:28.407.
Executed 1 test, with 2 failures (0 unexpected) in 8.396 (8.398) seconds
Test Suite ‘Selected tests’ failed at 2022-05-02 04:25:28.408.
Executed 1 test, with 2 failures (0 unexpected) in 8.396 (8.400) seconds

さいごに

両方とものツールを利用し、起きないようにしていきたいですね。
問題が起きてしまった場合の一時解析はMemoryGraphが便利かなと思います。

おすすめ書籍

[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus 詳解 Swift 第4版 [改訂新版]Swiftポケットリファレンス (POCKET REFERENCE)

blog-page_footer_336




blog-page_footer_336




-iOS
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

swift

[Swift]タブの切り替え時にアニメーションが簡単に実装できる「TransitionableTab」

1 はじめに2 準備3 実装4 さいごに はじめに こんにちは、nukkyです。 今回は、UITabBarControllerの切り替え時にアニメーションを実装できるライブラリ「Transitiona ...

【Swift】Xcode12対応ではまったNavigationControllerの挙動変更

1 はじめに2 今回のバグ3 詳細な内容4 修正5 さいごに6 おすすめ書籍 はじめに こんにちはsuzukiです。皆さんXcode12対応はおすみでしょうか、今回も駆け込みで色々対応しております。そ ...

swift

[Swift]ObjectMapperで簡単にJSONを読み込む

1 はじめに2 準備3 実装3.1 基本的な使い方3.2 ネスト配列に対応してみよう4 さいごに はじめに こんにちは、onukiです。 私はSwiftでJSONを取り扱う際に、 ObjectMapp ...

【Swift】QuickActionで普段と異なる初期画面を表示する。

1 はじめに2 Quick Actionとは3 実装方法3.1 Quick Actionの追加3.2 タップされた際の動作3.2.1 アプリが起動していない場合3.2.2 アプリが起動している場合4 ...

swift

Swift3でRealmを使ってみる

1 はじめに1.1 前提条件2 事前準備2.1 Realmのインストール・設定2.1.1 Carthageファイルの生成2.1.2 CarhageにてRealmをインストール2.1.3 Realmをイ ...

フォロー

blog-page_side_responsive

2022年5月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。