[Xcode 8][iOS 10] Xcode 8 の新機能!メモリ内の様子をビジュアル表示してくれる Debug Memory Graph

はじめに

Xcode 8 で注目されている機能の一つが、Debug Memory Graphです。デバッグ中に、メモリ内におけるオブジェクト同士の関係をビジュアルに表示する事ができる機能です。今回は、循環参照をビジュアル化してみたいと思います。

サンプルコード

class TestObject {
    var objTest: TestObject?
}

TestObjectクラスを定義します。 プロパティとして、TestObject型の変数objTestを定義します。

func createCycle() {
    let t1: TestObject = TestObject()
    let t2: TestObject = TestObject()
    let t3: TestObject = TestObject()

    t1.objTest = t2
    t2.objTest = t3
    t3.objTest = t1
}

TestObject 型のインスタンス t1,t2,t3を作成します。t1がt2を参照、t2がt3を参照、t3がt1を参照といった形で、循環参照を実現しています。

実行

実行すると、Debug Memory Graph を表示するためのボタンがデバッグエリア上に現れます。

クリックすると、各クラスと、そのインスタンス一覧が表示されます。

スクリーンショット 2016-09-11 20.45.15

例えば、このような形で Xcode の左ペインに表示されます。

メモリ上で各インスタンスがどのような関係で結びついているのかを確認するには、インスタンスをクリックすればOKです。

スクリーンショット 2016-09-11 20.45.27

Xcode 8 ではこのように表示されます!

また、この表示画面で、各インスタンスをコマンドキーを押しながらクリックすると、コードの該当箇所(今回の場合TestObjectクラス)に飛ぶことが出来ます。

まとめ

概念図としてよく見るこうした図が、実際のメモリ内の状況を反映した形で描画されるのは、とても新鮮です!

iOS 10 向けアプリ開発においても、デバッグにおいて、強力な武器になるのではないでしょうか。

なお、本記事は、当初WWDC会場から投稿したものです。

本日、ついに Xcode 8, iOS 10 が正式公開されましたので、加筆修正し、再度情報をお届けしました!

参考資料