質問

計測器を使用してリークの位置を特定しようとしていますが、表示されるリークは次の写真のようなものです:

  

リーク

ご覧のとおり、どのコード行が正確にリークしているかについての情報はありません。約20のリークはすべてこのようなものです。つまり、リークには特にコードの行が表示されません。

この図のリークは" _CFAllocatorSystem"に関連しています。 (???)CoreFoundationには、GSEventとだけ言う他の人がいます。これらが何を生成しているのかはわかりません。

どうすればそれを発見できますか?

ご協力ありがとうございます。

役に立ちましたか?

解決

リーク状態で実行した後に機器にアクセスし、「ソースビュー」を選択したいと思います。次に、ソースファイルを機器ウィンドウにドラッグする必要があります。次に、コールスタックとともに、リークが発生するコード内の行を表示します。

私のコードを投げ捨てると、ビューがリークします。 Instrumentsでは次のようになります。 代替テキストhttp://img688.imageshack.us/img688/9669/screenshot20091028at131.png

他のヒント

Leaksが示すのは、リークしているオブジェクトを割り当てたコードへのトレースです(つまり、オブジェクトは保持されますが、そのアドレスを持つ変数はアプリケーションに残っていません)。表示されないのは、リークを引き起こさないためにオブジェクトを解放する必要がある場所だけです。それを知ることは不可能です(現在リリースが呼び出されている場所を見つけることは可能ですが、それはそれほど役に立たないかもしれません)。 / p>

つまり、このトレースが私に言っているのは、システムによって割り当てられたメモリの一部がユーザーによって保持されていることです。そして、参照は忘れられます-1つのキーは" PurpleEvent"です。行。タイマーイベントまたはおそらく通知を処理するスレッドで一般的です。後でリリースせずに、通知を受け取って何かを保持した可能性があります。

リークが発生するポイントがわかっている場合は、その間に実行されているコードを分離できます。

こちら、特にこの引用をご覧ください。

このリストは、リークされたオブジェクトのタイプ、サイズ、アドレス、さらにはコールスタックについても通知します。

その後、コールスタックを介して、リークされたメモリのソースを追跡できます。

スタックトレースは、どの行が原因であるかを正確に示します。あなたの場合、明らかにmain.mの14行目です。混乱したことを知りませんか?

有罪は加速度計であり、私はOS 3.0用にコンパイルしています。

言い換えれば、Appleがリークが修正されたと言った加速度計は、まだ地獄のようにリークしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top