Help us understand the problem. What is going on with this article?

iOSでメモリーリークを簡単に検知できるようにする方法

More than 1 year has passed since last update.

はじめに

  • メモリーリークはアプリの挙動を不安定にする要因となる
  • Xcode の Debug Memory Graphなどを使う方法もあるが毎回調べるのにコストがかかる
  • krzysztofzablocki/LifetimeTrackerを導入することでアプリがメモリーリークをしていることに開発者が気が付きやすくなる

  • 今回はLifetimeTrackerについて詳しくまとめます

LifetimeTrackerとは

Find retain cycles / memory leaks sooner.

  • LifetimeTrackerはメモリーリークをアプリ実行時に把握できるようにするツールです
  • 導入することでアプリ実行時にUI上で確認できるようになります
  • krzysztofzablocki/Sourceryのコントリビュータでもあるkrzysztofzablockiが作者である

環境

Xcode 10.1
Build version 10B61
Apple Swift version 4.2.1 (swiftlang-1000.11.42 clang-1000.11.45.1)
Target: x86_64-apple-darwin18.2.0

導入方法

1. pods or carthageでLifetimeTrackerをインストール

pods

pod 'LifetimeTracker'

carthage

github "krzysztofzablocki/LifetimeTracker"

2.セットアップの処理をAppDelegateに追加

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
     LifetimeTracker.setup(onUpdate: LifetimeTrackerDashboardIntegration(visibility: .alwaysVisible, style: .bar).refreshUI)
     return true
}

3.メモリーリークを調べたいViewControllerに実装を追加

import UIKit
import LifetimeTracker

class ViewController: UIViewController {
    static var lifetimeConfiguration = LifetimeConfiguration(maxCount: 1, groupName: "VC")
    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        trackLifetime()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        trackLifetime()
    }
}

extension ViewController: LifetimeTrackable {}

実際の画面

  • サンプルコード
  • メモリに保持されているインスタンスの数がメニュー画面で確認できます
  • maxCountを設定することでインスタンスの数がmaxCountを超えた場合メニューに警告として表示される
  • groupNameを指定することでメニューで別のグループとして、まとめて表示されます
  • メニューの出し方も色々と選べるので実装時に邪魔にならないようになっています

参考リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした