2011-01-10 6 views
3

UIImageのメモリ管理に問題があります。
(iphone) my app gets memory warning when instruments shows "all allocations" only 7mb?(iphone)UIImageメモリ管理の問題

基本的には、UIImageを何度も作成/破棄します。
ローカルのNSAutoreleasePoolを使用して一度にメモリ消費量を少なくしても、iphone/ipadデバイスはメモリ使用量について不平を言っています。

私はUIImageを指定できるメモリバッファ(またはバッファプール)に割り当てるべきだと考えています。
これは可能ですか?

または、iOSを怒らせずに何度もUIImagesを作成/破棄する方法についての他の提案は、大変ありがたく思っています。

ありがとうございます。

答えて

10

これはよく知られている事実ではありませんが、Instrumentsは割り当てられたメモリ内のUIImageのサイズを考慮しません。あなたはUIImagesの100Mbを漏らしている可能性があり、割り当てられたメモリは話を伝えませんでした。その話を伝えるのは、与えられた瞬間のライブUIImageインスタンスの数です。

アロケーションでは、右上の検索ボックスを使用して「画像」を検索します。 UIImageで#linvingというラベルの列を探します。その数は、UIImageオブジェクトの数です。それはあなたのUIImagesがどこにあるのかを理解する上でより良い方位です。ある時点で、あなたが予想していたものより多くのオブジェクトを持っていて、UIのイメージが消え去っていなければ、UIImageのリークがあなたの手にあります。 UIImageのリークはあなたのアプリを本当に速く殺します。

+0

残念ながら、私の#living UIImageは私の期待を超えていません。 :(他の提案はありますか?#CGImageを含む他のすべてのものは、私が考えている以上(最大6+)変動しません.. umm多分6+ = 6mgとベースライン10mg = 16Mgが警告を引き起こしました – eugene

+0

私は、 4.0M未満のiOS(バックグラウンドアプリ機能はありません)。16MGが警告を出すのに十分だと言われても、16mgはまだ低すぎるようですが、私はそれがベースラインを下げることによってメモリ断片化の問題ではないことを確認する必要がありますメモリの使用量はもう少しです – eugene

+0

警告は必ずしも心配するものではありません.Apple独自のアプリケーション(特に網膜ディスプレイデバイス上のマップアプリケーション)によって、正常に生成され、正常に生成される可能性があります。それは重要ではなく、1つが誘発されたかどうかではありません。 – lxt

2

CGImageは私が(最大6+)考えるより多くを変動しない...うーん、多分6+ = 6mgのベースラインの10mg = 16mgの警告をトリガ

CGImagesが自動解放されていない、あなたが呼び出す必要がありますCGImageRelease(image);