0

基本的に画像とテキストを含む記事のリストであり、アプリの左側にメニューがあるユニバーサルアプリがあります。私はグーグルアナリティクスとパースのフレームワークを持っています。

iPad と iPhone のアプリの唯一の違いは、iPad ではサイド メニューが常に表示され、いくつかのインターフェイス オブジェクトが移動することです。(リストのセル レイアウトは異なりますが、内容は同じです)。

画像は、NSCache オブジェクトと NSOperationQueue を使用してディスクにダウンロード/保存するために作成した一連のクラスを使用して、非同期的にロードされます。(ユーザーがアプリを終了すると、ディスク キャッシュは消去されます)。NSCache は、約 10 mb で最大になるように設定されています。(画像サイズは、画像の高さ * 画像の幅 * 画像あたり 4 バイトと仮定します)。(ここのコードは両方で同一であるため、原因ではないはずですが、アプリのメモリ使用量の大きな部分です)。

iOS 5.0 を実行している古い iphone4 でメモリ警告/クラッシュに問題があったため、Activity Monitor Instrument を使用してアプリを実行したところ、非常に奇妙なことに気付きました。

iPad (iOS 5.1 を実行している iPad 2) では、アプリが起動し、すぐに表示される画像をロードし、約 16 MB のメモリを使用していました。

起動した iPhone4 では、可視画像をロードし、約 35 MB のメモリを使用していました。これは、予想をはるかに超えていました。

OS メモリの問題かどうかを確認するために、iOS6 を実行している iPhone5 でもアプリを実行しましたが、iPhone 4 とほぼ同じ量を使用しました。

メディアとストーリーボード ファイルをチェックして、何か違いがあるかどうかを確認しましたが、メモリ使用量を大幅に変更できるものは見つかりませんでした。

iPhoneでアプリのメモリ使用量を減らす方法はありますか? そんなに多くのメモリを使用する理由は考えられません。

4

1 に答える 1

0

見るのが非常に難しい..ある人が言ったように、Retinaデバイスはソースに応じてより多くのメモリを使用することに注意してください.バンドルで@2xイメージを設定すると、それらが読み込まれ、より多くのメモリが使用されます. 割り当てを使用して仮想メモリのプロファイリングを試みましたか? 通常、メモリの使用は問題ありませんが、メモリ警告が発生した場合でも、問題はそれにどのように対応するかです。問題が発生した場合、十分なメモリが解放されますか? シミュレータでメモリ警告をシミュレートしてみてください。sim はデバイスよりも多くのメモリを使用することに注意してください。もう1つのポイントは、ARCはリークを作成しにくいため、リテインサイクルと放棄されたメモリを作成しやすいことです。オブジェクトの正しいライフサイクルは、オブジェクトの割り当て解除で終了する必要があります。あなたは NSCache を使用し、ネット非同期から画像を読み込むと言っています。私はあなたに 3 つの提案をします:

  1. ソースの元の画像サイズを知っていますか? iPad のソース画像は iPhone よりも小さいかもしれません。画像をダウンロードした後の正しいアプローチは、実際に必要なサイズに応じてサイズを変更することです(単にストレッチするのではなく、再描画することを意味します)、QuartzまたはImageIOを使用してそれを達成できます
  2. メモリ警告後の NSCache の動作を理解できませんでした。Apple は、メモリをフラッシュすると言っていますが、iOS4 でいくつかのテストを行った後 (今はわかりません)、同意しません。メモリ警告を監視してメモリをフラッシュする独自のサブクラスを作成しました
  3. キャッシュから画像を取得していると確信していますか?
于 2013-06-14T06:18:24.500 に答える