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


関連記事

Flutterでテストコードを書こう! 単体テスト・Widgetテスト・インテグレーションテスト

1 はじめに2 単体テスト2.1 testパッケージの利用2.2 テストの書き方2.3 テストの実行2.4 モック化2.4.1 mockitoの導入2.4.2 メソッドのモック化3 Widgetテスト ...

[Swift]AlamofireでファイルのUploadをしてみる

1 はじめに2 CarthageでAlamofireを導入する2.1 CartFileの作成とライブラリのダウンロード2.2 Xcodeの設定3 Alamofireとは3.1 AlamofireのHT ...

[Swift]Alamofireを使ってファイルをDLしてみる

1 はじめに1.1 前提条件2 今回やること3 準備4 実装4.1 DLしたファイルへのアクセス5 さいごに はじめに こんにちは、nukkyです。 みなさんSwiftでの通信ライブラリは何を使ってま ...

swift

[Swift]CSVを読み込みRealmに保存してみる

1 はじめに1.1 前提条件2 準備3 実装4 さいごに はじめに こんにちは、nukkyです。 今回はDBにプリセットなどを用意する際にCSVを使ってRealmで保存して見たいと思います。 前提条件 ...

swift

[Swift3]で直感的にアニメーションが記述できるライブラリ「Cheetah」

1 はじめに2 準備3 実装3.1 準備3.2 移動3.3 回転と拡大3.4 速度調整3.5 繰り返し3.6 アニメーションの終了4 さいごに はじめに こんにちは、nukkyです。 今回は、仕事でV ...

フォロー

blog-page_side_responsive

2022年5月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

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