7

比較的複雑なプロジェクトに取り組み始めたばかりで、バグを発見しました。ユーザーがログアウトすると、View Controller は引き続きログイン View Controller の背後に割り当てられます。それらは回転イベントなどに応答し続けます。nilログアウト時にコントローラーを設定しましたが、まだ応答しています。これは、他のオブジェクトがまだポインターを持っていることを示しています。(このプロジェクトでは ARC が有効になっています。)

ARC以前は、オーバーライドすることでこれを解決retainできた可能性があります:

- (id) retain
{
    // Break here to see who is retaining me.
    return [super retain];
}

Xcode デバッグ ツールを使用してオブジェクトを選択し、それを指す他のすべてのオブジェクトを一覧表示するにはどうすればよいですか? すべてのコードを単純に調べるよりも良い方法はありますか?

4

2 に答える 2

1

Instruments Heapshot Analysisツールは、この目的のために私が見つけた最高のものでした。 この記事では、より完全なチュートリアルを提供していますが、基本的な手順は次のとおりです。

  1. [製品] ->[プロファイル]を選択します。AllocationsInstrumentを選択します。
  2. 左側で、重要なイベントの前後に[マークヒープ]ボタンを押します。私の場合、これはログイン前、ログイン後、およびログアウト後でした。
  3. ヒープショットを検索して、探しているクラスを探します。
  4. 開示の三角形を押して、そのメモリアドレスを確認します。
  5. メモリアドレスの右側にある矢印を押して、担当の呼び出し元を確認します(右端の列に表示されます)。

他の誰かがより詳細な説明を書いたり、関連するlldbコマンドを提供したりできる場合は、あなたの答えを正解としてマークさせていただきます。

于 2013-01-29T17:49:22.833 に答える