2013-02-15 5 views
55

Objective-Cオブジェクトの割り振りと割り振りを追跡することは可能ですか?たとえば、私がクラスBookを持っているならば、私はBookタイプのオブジェクトのすべての割り当てと割り当て解除を追跡したいと思います。 UIViewController、UIWindow、UIView、NSDictionaryなどすべてのデフォルトのSKDクラスを追跡できますが、定義したクラスから作成されたオブジェクトも追跡したいと思います。Instruments割り振りは、ユーザー定義クラスのオブジェクトのallocとdeallocを追跡します。

答えて

212

割り当ての計測器を使用して、オブジェクトのライフサイクルを追跡できます。 「割り当て」テンプレートを使用する場合は、mallocfreeイベントを記録するように設定されています。楽器が録音されている間(あなたはこれを切り替えることはできません

record reference counts checkbox

を:あなたはまた、割当機器の設定で「レコードの参照カウント」のチェックボックスをオンにしてretainrelease、およびautoreleaseイベントを記録するように設定することもできます、それはできるだけ早くあなたのテンプレートを選択すると、デフォルトで開始する)

更新Xcodeの9のために:。 Appleはそれがより困難これらの設定を見つけるようになりました。次に、Allocationsインストゥルメントを選択し、メニューバーからFile> Recording Optionsを選択します。あなたの実行後に

、あなたは詳細ペイン(ウィンドウの下半分)のデフォルト設定ですアロケーション>統計>オブジェクトの概要ビューを使用してオブジェクトを検索することができます

Object Summary setting for Detail pane

あなたが実行を停止する前に割り当てを解除されたオブジェクトを表示したい場合は、「すべてのオブジェクトが作成された」(デフォルト)に「&スティルリビングに作成」から設定を割り当て寿命を変更する必要があります。

Allocation Lifespan setting

特定のクラスのオブジェクトを検索するには、ウィンドウのツールバーの右端にある検索フィールドにクラス名を入力します。次に、リストビューのカテゴリ列でクラス名を見つけて、その上にマウスを移動し、その横に表示される矢印をクリックします。例えば、私のアプリはTileという名前のクラスを持っているので、私はそれを検索して、リストビューでTileの隣にある矢印をクリックします。

Searching

今リストビューがTileのすべてのインスタンスを示しています。 NSObjectと入力すると、[NSObject alloc]で作成されたオブジェクトのみが見つかり、[Tile alloc]で作成されたオブジェクトではありません。)特定のインスタンスの履歴は、クリックすると表示されます次回、そのインスタンスのアドレスへの矢印:

Getting detail

オブジェクトの詳細ビューでは、私はmallocfreeイベントを見ることができると、私は「レコードの参照カウント」をオンにするので、私も見ることができますretainrelease、およびautoreleaseメッセージとそのオブジェクトの保持カウントへの影響。私はこれらのイベントのいずれかの呼び出しスタックを確認したい場合は、私は、ウィンドウの右側に拡張詳細パネルを開くことができます。

extended detail of call stack

+0

これは素晴らしい記事です。インタラクティブ画像の場合+1。これらのスクリーンショットを作成するためにどのアプリを使用しましたか? – gyurisc

+8

私はScreenFlowを使って画面を記録し、各ビデオの長さとサイズを編集しました。その後、Photoshopを使用して各動画をアニメーションGIFに変換しました。 –

+2

@robmayoff fabulas仕事、あなたのような人たちは、iOSコミュニティがますます多くのことを学ぶのを手伝っています。 – Alok