Objective-Cオブジェクトの割り当てと割り当て解除を追跡することはできますか?たとえば、Bookというクラスがある場合、Bookタイプのオブジェクトのすべての割り当てと割り当て解除を追跡したいと思います。 UIViewController、UIWindow、UIView、NSDictionaryなど、すべてのデフォルトのSKDクラスを追跡できますが、定義済みのクラスから作成されたオブジェクトも追跡したいです。
割り当てツールを使用して、オブジェクトのライフサイクルを追跡できます。 「割り当て」テンプレートを使用する場合、malloc
およびfree
イベントを記録するように構成されます。割り当て機器設定の「参照カウントの記録」チェックボックスをオンにして、retain
、release
、およびautorelease
イベントを記録するように設定することもできます。
(Instrumentsが記録している間、これを切り替えることはできません。テンプレートを選択するとすぐにデフォルトで開始されます。)
Xcode 9のアップデート: Appleはこれらの設定を見つけるのをより難しくしました。今度はAllocationsインストゥルメントを選択し、メニューバーからFile> Recordingを選択する必要があります。オプション。
実行後、[割り当て]> [統計]> [オブジェクトの概要]ビューを使用してオブジェクトを見つけることができます。これは、詳細ペイン(ウィンドウの下半分)のデフォルト設定です。
実行を停止する前に割り当て解除されたオブジェクトを表示する場合は、割り当て寿命の設定を「作成済み&静止」(デフォルト)から「作成されたすべてのオブジェクト」に変更する必要があります。
特定のクラスのオブジェクトを見つけるには、ウィンドウツールバーの右端にある[検索]フィールドにクラス名を入力することから始めます。次に、リストビューの[カテゴリ]列でクラス名を見つけ、その上にマウスを置き、その横に表示される矢印をクリックします。たとえば、私のアプリにはTile
という名前のクラスがあるので、それを検索してから、リストビューでTile
の横にある矢印をクリックします。
これで、リストビューにTile
のすべてのインスタンスが表示されます。 (スーパークラスではなく、オブジェクトの実際のクラスを入力する必要があることに注意してください。NSObject
を入力すると、[NSObject alloc]
によって作成されたオブジェクトではなく、[Tile alloc]
。)特定のインスタンスの履歴を表示するには、そのインスタンスのアドレスの横にある矢印をクリックします。
オブジェクトの詳細ビューでは、malloc
およびfree
イベントを確認できます。また、「参照カウントの記録」をオンにしたので、retain
も確認できます。 release
、およびautorelease
メッセージと、オブジェクトの保持カウントへの影響。これらのイベントの呼び出しスタックを表示したい場合は、ウィンドウの右側にある拡張詳細パネルを開くことができます。