はじめに
-
メモリーリークはアプリの挙動を不安定にする要因となる
-
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
を指定することでメニューで別のグループとして、まとめて表示されます - メニューの出し方も色々と選べるので実装時に邪魔にならないようになっています