0

ここで、少なくとも私にとっては奇妙なケースがあります。Web から XML ファイルをロードし、それを解析して、データを辞書の配列に書き込む比較的単純なプログラムがあります。各ディクショナリは、テーブル内の行を表します。プログラムは正常に動作し、シミュレーターを計測器に接続してリストをロードすると、メモリ リークは発生しません。

ここで奇妙な部分があります。ユーザーがリストをリロードするためのボタンがあります。それを押すと、以前のデータがクリアされ、XML が新しくダウンロードされて解析されます。このボタンを押しても、まだメモリ リークが見つかりません。しかし、それを 2 回押すと、突然漏れがあちこちに発生します。私は非常に困惑しています。なぜ、以前は何もなかったリークが突然発生するのでしょうか (リークは、同じコードが 2 回実行された場合にのみ表示されます)。たとえば、Apple のサンプル XMLParser の一部を使用しているため、特に奇妙です。私のコードは、Apple のコードの 1:1 コピーですが、パーサーを 2 回実行すると、インストルメントはこのコードのリークを報告します。

私は助けてくれてうれしいです、私はこれについてどうやって手に入れるかほとんど知りません。コードは問題ないはずです。私はすでに「ビルドと分析」を試しましたが、インストゥルメントでは見られないことも明らかになりません。

ごきげんよう、ロビン

4

2 に答える 2

1

確かな答えを出すには、ここには十分な情報がありません。

そうは言っても、使用しているメモリ リーク検出ツールの結果を誤解している可能性があるようです。孤立したオブジェクトを探してオブジェクト グラフをスキャンしている場合、再読み込みするまでオブジェクトが孤立していることに気付かない場合があります。これは、使用しているサードパーティ ライブラリの 1 つ (または独自のコード) に、オブジェクト グラフのルートへの静的なキャッシュ参照が存在する可能性があるためです。再読み込みすると、キャッシュされた参照は新しいルート オブジェクトとすべての古いオブジェクトは、ルート化された変数 (コール スタック上のローカル変数または静的変数) によって参照されなくなり、孤立して「リーク」されます。

于 2010-01-25T23:48:39.030 に答える
0

プログラムは正常に動作し、シミュレーターを計測器に接続してリストをロードすると、メモリ リークは発生しません。

これは、リークがないことを意味するわけではありません- 機器がそれらをキャッチしていない可能性があります - サンプリングは n/秒ごとに行われます。

于 2010-01-25T23:48:18.247 に答える