2012-03-05 9 views
0

オブジェクトが頻繁にリリースされ、その後イベントループによって割り当てが解除される問題をデバッグしようとしています。次にオブジェクトから読み取ろうとすると、アプリケーションはEXC_BAD_ACCESSでクラッシュします。Instrumentsは私に実際の参照カウントを表示しません

デバッグするには、NSZombiesを有効にしてから、ZombiesプロファイルをInstrumentsで使用しています。私はその後、私のアプリがクラッシュするところに到達し、インストルメントは解放されたインスタンスに送られるメッセージについて私に知らせます。ここまでは順調ですね。

UIKitなどのライブラリが公開されているオブジェクトを指し示す場所を私に示してもらえますが、自分のコードがどこにあるのかはわかりません。真の参照カウントも表示されません。インストゥルメントが参照カウントを1と指定するまでに、参照カウントは実際にはgdbの参照カウントを出力することによって8になります。

私はInstrumentsが何とか出力をフィルタリングしている可能性を調査しましたが、実際にすべてのリリースを記録してイベントを保持しているように見えます。私のView Controllerは表示後すぐに割り当てが解除されるため、コントローラにメッセージを送信する何かをしようとするとクラッシュする可能性があるため、アプリケーションでは絶対に何かでなければなりません。

deallocメソッドにブレークポイントを配置した後、私は自分のオブジェクトが実際にイベントループによって割り当て解除されていることを発見しました。これは、deallocの不正なコールではありません。

+2

郵便あなたにViewControllerをインスタンス化しています。 –

答えて

1

アップルのフレームワーククラスは、あなた自身のオブジェクトへの参照を保持している可能性があるため、参照カウントに頼ることはできません。参照カウントはデバッグに意味がありません。左(I)で

+0

確かに。私が見ることができる限り、1つか2つだけあるはずのオブジェクトについてかなり高い参照数を見ました。しかし、舞台裏では、特に計測の際には、さらに多くのものが得られます。しかし、インストゥルメントを使用しなくても、数はしばしばそれよりもはるかに高くなりますが、決して低くなることはありません。 –

+0

確かに2つの数字は一致するはずですか?インストゥルメントは、Appleのフレームワーク内でリリースを見て内部的に保持しませんか?また、私のソフトウェアがリリースし保持するコールをInstrumentsが記録していない理由を知っていますか? –

+0

私はこれを数時間後に解決しましたが、更新を忘れました。実際には私のファイルの所有者を私のカスタムViewControllerに設定して、ペン内のTableViewControllerを同じViewControllerに設定していました。これにより、同じViewControllerの2つのインスタンスが作成されました。そのうちの1つは、イベントループが次に実行されたときに素早く食べられました。しかし、UI内のすべてのアクションは、この割り当て解除されたインスタンスに関連付けられていたため、クラッシュしました。読んでいただきありがとうございました。私の質問にお答えし、おいしい評判をお楽しみください。 –

0
  1. クリックして割り当て、グラフ
  2. セット "レコード参照カウント" あなたが行われ
  3. ;)

Activate reference count

関連する問題