2

私のアプリでは、ユーザーは画面に任意の数のオブジェクトを表示することを選択できます。表示される各ファイルは、ファイルからアーカイブ解除し、メモリに入れてから表示する必要があります。通常、許可されているオブジェクトの最大数が表示されている場合、アプリの合計メモリ消費量は約15MBに増加します。ホームボタンを押してアプリを一時停止してからアプリに戻ると、消費されるメモリは約6MBに減少します。すべてがまだ機能しています。オブジェクトはまだメモリ内にあります。これはどのように可能ですか?私はこれを実際のデバイスでテストしています。これはInstrumentsの問題ですか、それともアプリがバックグラウンドに移行したときに解放されるナビゲーションコントローラーで行われているキャッシュのようなものがありますか?これに光を当てるようなものなら何でも歓迎されます。

編集:

インストゥルメントの2つの「割り当て」ツールの違いに気づきました。アプリのプロファイルを作成するときに、「リーク」または「割り当て」を選択できます。リークを選択することで、メモリフットプリントの1つの測定値を確認できます。これは、約20MBでピークになります。割り当てを選択することで、メモリフットプリントの別の測定値がわかります。これは、巨大な230MBでピークに達します。明らかに、それぞれが測定しているものにはいくつかの違いがあります。どちらを見ればいいですか?私は常に「リーク」の割り当て測定を見てきました。


アプリの同じポイントで取得された最近の2つのプロファイルは次のとおりです。

「リーク」を使用すると、次の結果が得られます。

リーク

'Allocations'を使用すると、次の結果が得られます。

割り当て

誰かがこの違いの背後にある意味を私に説明できますか?

4

1 に答える 1

1

私が理解している限り、割り当ては合計で割り当てられたメモリの量を示しますが、割り当てが解除されたビットは削除されません。Leaksは、リークされたメモリの量、つまり、割り当てられたが解放されなかったメモリの量を示します。これを常にゼロにすることを目指す必要があります。メモリリークを回避するには、プロジェクトでARCを使用するか、すべてを適切に保持および解放するようにしてください。

アプリが消費するメモリの量を測定したい場合は、InstrumentsのActivity Monitorを選択すると、実際の量が表示されます。

于 2012-06-27T13:11:07.657 に答える