59

Objective-C オブジェクトの割り当てと割り当て解除を追跡することはできますか? たとえば、クラス Book がある場合、Book タイプのオブジェクトのすべての割り当てと割り当て解除を追跡したいと考えています。UIViewController、UIWindow、UIView、NSDictionary など、すべての既定の SKD クラスを追跡できますが、定義済みのクラスから作成されたオブジェクトも追跡したいと考えています。

4

1 に答える 1

223

Allocations インストゥルメントを使用して、オブジェクトのライフサイクルを追跡できます。「割り当て」テンプレートを使用する場合、それは記録mallocfreeイベントに設定されます。Allocations Instrument 設定の「Record reference counts」チェックボックスをオンにしてretain、 、release、およびイベントも記録するように構成することができます。autorelease

参照カウントを記録するチェックボックス

(Instruments がレコーディングしている間は、これを切り替えることはできません。デフォルトでは、テンプレートを選択するとすぐにレコーディングが開始されます。)

Xcode 9 の更新: Apple は、これらの設定を見つけることをより困難にしました。ここで、Allocations インストゥルメントを選択する必要があります。次に、メニュー バーから [ファイル] > [レコーディング オプション] を選択します。

実行後、詳細ペイン (ウィンドウの下半分) のデフォルト設定である [割り当て] > [統計] > [オブジェクトの概要] ビューを使用して、オブジェクトを見つけることができます。

詳細ペインのオブジェクト概要設定

実行を停止する前に割り当て解除されたオブジェクトを表示する場合は、割り当ての有効期間の設定を [作成済み & まだ生きている] (デフォルト) から [作成されたすべてのオブジェクト] に変更する必要があります。

割り当て有効期間設定

特定のクラスのオブジェクトを検索するには、ウィンドウ ツールバーの右端にある [検索] フィールドにクラス名を入力することから始めます。次に、リスト ビューの [カテゴリ] 列でクラス名を探し、その上にマウスを置いて、その横に表示される矢印をクリックします。たとえば、私のアプリには という名前のクラスがあるので、それを検索して、リスト ビューの のTile横にある矢印をクリックします。Tile

検索中

これで、リスト ビューに のすべてのインスタンスが表示されますTile。(スーパークラスではなく、オブジェクトの実際のクラスを入力する必要があることに注意してください。入力すると、 によって作成されたオブジェクトではなく、NSObjectによって作成されたオブジェクトのみが検索されます。) 次の矢印をクリックすると、特定のインスタンスの履歴を表示できます。そのインスタンスのアドレスに:[NSObject alloc][Tile alloc]

詳細の取得

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

コール スタックの拡張詳細

于 2013-02-15T09:41:14.237 に答える