2011-01-30 10 views
0

私のアプリでは、いくつかの画像をUIScrollViewに読み込んでおり、Core Graphicsルーチンを使ってスクロールビューの一部をハイライトしています。私はCGImageReleaseとCGContextReleaseを使ってルーチン中のメモリを管理しています。UIImage ImageNamedメソッド

私は、楽器(割り当て)を使用してアプリケーションを実行すると、メモリ消費量がscrollViewのすべてのスワイプで上昇し続けることがわかります。これは一点で、アプリが本当に遅くなることにつながります。

私はUIImage ImageNamedメソッドを使用していますが、メモリの問題を引き起こすオートレリースされたイメージが生成されるため、これは良いアイデアではないことを示すいくつかの投稿が出ています。私はエラーの正しい場所を探しているかどうかを知りたいです。この異常なメモリ消費を探す可能性のある場所は何でしょうか?

また、Instrumentsの割り当てを使用して、私はちょうどメモリの増加を見ることができます、これらの割り当てが発生するコードをポイントすることは可能ですか?

ご協力いただきありがとうございます。

ベスト DKV

答えて

0

異なる画像をロードするため、私はUIImage ImageNamedメソッドを使用して、私はこれはメモリの問題を作成し、自動解放画像内のメソッドの結果から、良いアイデアではないことを示すいくつかの記事に遭遇してきました。

いいえ、それは問題ではありません。 allocinit [WithSomethingOrOther:]、およびreleaseを自分で呼び出すことに関与していないものは、自動でイメージを取得します。

問題はimageNamed:があなたに手渡した後でイメージを所有し続けていることです。 imageNamed:から取得したすべてのイメージは、その名前に完全に関連付けられたそのキャッシュに残ります。これは単なる「この画像を読み込む」方法ではない。それは "この画像をロードし、永遠に生き続ける"方法です。

*「永遠に」は「プロセスが終了するまで」を意味します。

私はエラーの正しい場所を探しているかどうかを知りたいと思います。この異常なメモリ消費を探す可能性のある場所は何でしょうか?

インスツルメント。それは、あなたが作成している各種類のオブジェクトの数と、どの種類のメモリオブジェクトがどれくらい占有しているかを正確に示します。そのリストを並べ替えて、何がメモリを食べているのかを判断できます。次に、各クラスと各オブジェクトにドリルダウンして、必要なときにオブジェクトを生かし続けるものを判断することができます。

+0

私は「それは永遠に生き続ける」方法をどのように知っていますか?正式な参照や声明を入手できますか? –

+0

@JimWatson:[ドキュメント](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImage_Class/#//apple_ref/occ/clm/UIImage/imageNamed :)詳細についてはあいまいですしかし、それはキャッシュに画像を保持すると言います。より具体的なものは、観察された行動であり、変化する可能性があります。そして、実際には、これは約4年の間にすでに変化している可能性があります。しかし、それが文書化されていなければ、私はそれに頼ることはありません。 –

関連する問題