0

私のアプリでは、いくつかの画像を UIScrollView にロードしており、Core Graphics ルーチンを使用してスクロール ビューの一部を強調表示しています。CGImageRelease と CGContextRelease を使用して、ルーチン中にメモリを管理しました。

インストルメント (割り当て) を使用してアプリを実行すると、scrollView をスワイプするたびにメモリ消費量が増加し続けることがわかります。これにより、ある時点でアプリが非常に遅くなります。

さまざまな画像をロードするために、UIImage ImageNamed メソッドを使用します。この方法では画像が自動解放されてメモリの問題が発生するため、これはお勧めできないことを示す投稿に出くわしました。エラーの適切な場所を探しているかどうかを知りたいです。この異常なメモリ消費を探す場所はどこでしょうか?

また、Instruments の割り当てを使用すると、メモリの増加を確認できます。これらの割り当てが発生するコードを特定することは可能ですか?

よろしくお願いします。

最高のDKV

4

1 に答える 1

0

さまざまな画像をロードするために、UIImage ImageNamed メソッドを使用します。この方法では画像が自動解放されてメモリの問題が発生するため、これはお勧めできないことを示すいくつかの投稿に出くわしました。

いいえ、それは問題ではありません。allocinit[ WithSomethingOrOther:]、およびrelease自分自身を呼び出すことを伴わないものはすべて、イメージを自動解放します。

問題はimageNamed:、画像を渡した後も画像を所有し続けることです。取得したすべての画像imageNamed:はそのキャッシュに残り、その名前に永続的に関連付けられます。これは単に「この画像を読み込む」方法ではありません。それは「この画像を読み込んで永久に保存する*」方法です。

※「forever」とは「私のプロセスが終わるまで」という意味です。

エラーの適切な場所を探しているかどうかを知りたいです。この異常なメモリ消費を探す場所はどこでしょうか?

楽器で。作成している各種類のオブジェクトの数と、各種類のメモリ オブジェクトの合計がどれだけ占有されているかが正確にわかり、そのリストを並べ替えて、何がメモリを消費しているかを判断できます。次に、各クラスと各オブジェクトにドリルダウンして、オブジェクトが必要になったときに何がオブジェクトを存続させているかを判断できます。

于 2011-01-31T01:03:56.670 に答える