2

アプリでのメモリ使用量を削減しようとしていますが、Instruments で分析すると、UIView drawLayer:inContext: が 2.25 MB を割り当てていることがわかります。コードが呼び出される直前に割り当てが行われ、どこかで UIView または CALayer のサイズが正しくないことが原因であると想定しています。しかし、私のコードは割り当てに関与していないため (下の図を参照)、これをデバッグする方法がわかりません。すべてのビューとレイヤーを既に確認したと思いますが、何も問題はありません。

どんなアイデアでも大歓迎です!

ここに画像の説明を入力

4

2 に答える 2

3

心配しないで。システムはレイヤーに 640 * 960 * 4 バイトのバッキング ストアを割り当てています。

レイヤーまたはビューをリークしない場合、ビューがアンロードされた時点で、最終的にバイトが返されます。

于 2012-07-14T21:09:07.773 に答える
2

iOS アプリは、メモリが不足したときに突然クラッシュするだけではありません。不要なビューをアンロードし、View Controller にメモリ警告を送信します。アプリのクラッシュがメモリに関連していると思われる場合は、メモリ不足の状況を適切に処理していることを確認してください。不要なデータを実装-didReceiveMemoryWarningして削除します。-viewDidUnload

ビューは大量のメモリを使用する可能性があります。UIViewController必要に応じてビューを解放しますが、同じビューへの別の強力な/保持されたポインターがある場合、ビューコントローラーが継承する機能はそれを解放することを認識せず、ビューは必要なくても解放されません. 全画面表示に適したサイズのメモリの大きなブロックであるため、これがあなたのケースで起こっていることのように思えます。ビュー コントローラのビュー (またはその他のビュー) への追加のポインタがないかビュー コントローラを確認し、そのようなポインタを nil に設定するか解放するようにしてください (ARC を使用しているかどうかによって異なります)。

于 2012-07-15T01:21:17.893 に答える