しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

【Xcode】Debug Memory Graphでメモリリークをチェック

Xcode8から登場したDebug Memory Graphという機能を試してみました。
これはインスタンス間の参照を図として表示できるもので、循環参照の発見などに役立ちます。

Debug Memory Graphは、アプリ起動後にデバッグエリア右端のアイコンをタップする事で実行できます(下画像の右端)

f:id:llcc:20171018141743p:plain

アイコンをタップすると、下のようにアプリ上のインスタンス一覧が表示されます。

f:id:llcc:20171018141832p:plain

インスタンスを選択すると、下のようにインスタンス同士の参照を図として見る事ができます。

f:id:llcc:20171018141925p:plain

次に、下のように循環参照する処理を書くとどうなるか試してみました。

class MyClassA {
    var myClass: MyClassB?
}

class MyClassB {
    var myClass: MyClassA?
}

let myClassA = MyClassA()
let myClassB = MyClassB()
myClassA.myClass = myClassB
myClassB.myClass = myClassA

Debug Memory Graphで見ると、下のように相互に参照をもっている事が分かります。

f:id:llcc:20171018142244p:plain

インスタンス一覧には紫色の警告マークが出るので、循環参照がすぐに分かります。

f:id:llcc:20171018142259p:plain

循環参照がない場合は下のように一方向だけの矢印になります。

f:id:llcc:20171018142506p:plain