3

私は楽器ツールを学び始めたばかりですが、私が見ているものは良くないと確信しています。割り当て、特に「LiveBytes」と「OverallBytes」の列を見ると、アプリの実行に伴って数が継続的に増加していることがわかります...

私のアプリには2つのビューコントローラーがあります。テーブルビューと2番目のビューコントローラは、インターネットからダウンロードしたテーブルビューで選択した行に関する詳細情報を表示します。

テーブルビューの行をクリックし続けた後、ナビゲーションバーの[戻る]ボタンをクリックしました...そしてLiveBytesは増え続けました。

これは、オブジェクトがメモリから解放されていないことを意味していると思います...しかし、間違っている場合は修正してください。

私の質問は次のとおりです。このメモリの問題を追跡するために、機器/割り当てのデータをどのように使用しますか?オブジェクトがメモリから解放されていないことを確認するにはどうすればよいですか?

これらのツールを使用して、アプリのメモリの問題をクリーンアップする方法に関するヒントを探しています。

ありがとう!

XCODE 4.2.1、iOS5.0以降へのデプロイ

編集:私は#living列を見て、UIScrollViewのようなオブジェクトが継続的に増加しているのを見ています...そして決して減少しません。ナビゲーションバーの戻るボタンをクリックすると、オブジェクトは自動的にメモリから解放されますか?オブジェクトはいつリリースされますか、それとも手動で行う必要がありますか?または、強力なポインターを使用しているために問題が発生し、オブジェクトが解放されない可能性がありますか?

4

4 に答える 4

1

周期的なパターンでメモリ使用量を観察したいときはいつでも、「割り当て」インストルメントにすばらしいヒープショット分析があります。

  1. アプリを起動し、デフォルトの状態に移動します。
  2. Instruments で、「Mark Heap」ボタンを押して「ベースライン」を作成します。
  3. ビュー コントローラーをプッシュするなど、アプリで何かを行います。
  4. デフォルトの状態に戻します。
  5. 「Mark Heap」ボタンをもう一度押して、ヒープショットを作成します。
  6. 手順 3 から 5 回程度繰り返します。

これにより、ヒープショットのリストが作成され、それぞれがそのサイクルからまだ生きているオブジェクトを示します。アプリにリークがない場合、中間のヒープショットにオブジェクトは残りません。

最初の 1 つか 2 つのサイクルでは一部のキャッシュがウォームアップされた可能性があり、最後の 2 サイクルでは再利用されたリソースの一部がクリーンアップされていない可能性があります。そのため、通常は 4 ~ 6 個のヒープショットを作成することをお勧めします。

ヒープショット分析の魔法は、ヒープショットが前のサイクルからリークしたオブジェクトを示し、後でオブジェクトが解放されたときにそれらを自動的に削除するという事実にあります。「リーク」ツールとは対照的に、リークだけでなく、放棄されたメモリも検出します。

于 2012-07-17T19:09:32.670 に答える
1

ほとんどの場合、arm64 を破棄し、armv7 のみでアプリを実行しています。arm64 と armv7 の両方をアーキテクチャとして追加します

于 2017-05-23T09:23:14.430 に答える
0

メモリの問題を解決する最良の方法の1つは、ARCを使用することだと思います。

Edit -> Refactor -> Upgrade to Objective-C ARC.

ARCは、アプリのメモリ管理の大部分を処理します。特に、アプリがそれほど複雑に聞こえない場合は、問題が完全に解消される可能性があります。ただし、保持サイクルに注意し、メモリの警告を聞く必要があります。ARCを使用したくない場合(使用する必要があります)、少なくとも静的アナライザーを実行します。問題は、静的アナライザーが修正方法を示すことができる単純なものである可能性があります。

編集:

あなたはスクロールビューについて言及しました-これはあなたの問題かもしれません:UIScrollViewがリリースされるたびにメモリリークが発生します

于 2012-07-17T18:43:43.903 に答える
0

プロファイル ツールには、「Leaks」と呼ばれるツールがあります。これは「割り当て」インストゥルメントに似ていますが、リリースされていないオブジェクトが表示されます。「リーク」ツールを使用して、保持されていたオブジェクトを見つけ、これらのオブジェクトを解放できる場合があります。

于 2012-07-17T19:08:51.080 に答える