web-dev-qa-db-ja.com

機器の割り当ては、ユーザー定義クラスのオブジェクトの割り当てと割り当て解除を追跡します

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

56
Cosmin

割り当てツールを使用して、オブジェクトのライフサイクルを追跡できます。 「割り当て」テンプレートを使用する場合、mallocおよびfreeイベントを記録するように構成されます。割り当て機器設定の「参照カウントの記録」チェックボックスをオンにして、retainrelease、およびautoreleaseイベントを記録するように設定することもできます。

record reference counts checkbox

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

Xcode 9のアップデート: Appleはこれらの設定を見つけるのをより難しくしました。今度はAllocationsインストゥルメントを選択し、メニューバーからFile> Recordingを選択する必要があります。オプション。

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

Object Summary setting for Detail pane

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

Allocation Lifespan setting

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

Searching

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

Getting detail

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

extended detail of call stack

216
rob mayoff