2011-06-28 4 views
1

これは明らかに、私のアプリは2世代目のiPodでメモリが足りないためクラッシュします。私が行うのは、ユーザーがスクロールするときに、scrollView + pageControl内の各ビューでイメージを呼び出すことでした。メモリ警告を受けた後、特定のポイントに達したときにアプリがクラッシュしました。私は警告を受けたときに視界を解放しようとしましたが、それでもクラッシュが発生しました。iOS4がImageNamedを呼び出しています:まだメモリリークが発生していますか?

私はグーグルで「ImageNamed」と尋ねました。このAPIコールでは明らかに問題がありましたが、ほとんどの記事では最近のiOS版で修正されたとのことです。

ImageNamedではなくimageWithContentOfFileを呼び出すとこの問題が解決されましたが、ImageNamedがまだメモリリークを引き起こすかどうか、またはビューが解放されたときにフリーズしないのだろうかと思います。

+0

あなたのiPod Touch 2gではどのOSバージョンが動作していますか? –

+0

私は自分のiOS 4.2.1 – REALFREE

+0

を信じています。イメージを漏らしていない、それをキャッシングしています(RyanRの説明のように)。あなたのアプリと複数の場所で常に使用される小さな画像にのみ 'imageNamed:'を使用してください。 – bshirley

答えて

7

imageNamed:は、リークを引き起こすことはありませんが、頻繁に誤解されているため、使用時にメモリの問題が発生します。これは、ロードされた後の非圧縮画像をキャッシュします。つまり、直ちに2枚の画像がメモリに保存されます。小さくて頻繁に使用されるイメージ(アイコンなど)に使用する場合は、実行時にファイルをディスクからフェッチする必要がないため、これは優れています。これはすでにキャッシュ内にあります。これによってユーザーに問題が発生するのは、imageNamed:を使用して大きな画像、たとえばカメラで撮影した4MP画像を読み込む場合です。その画像takes up quite a bit of memory:4百万画素、1画素当たり4バイト= 16MBのメモリ、2倍。この方法を使ってスライドショー、写真共有、カメラアプリなどの画像を読み込んだ場合、実際の処理速度は大幅に向上します。

これらの機能が必要な機能に合わない場合は、他のUIImageの読み込み方法の1つを使用してください。ユーザーはあなたに感謝します。

注::この情報は、UIKitレンダリングセッションを発表したアップルエンジニアからのものです。うまくいけば私のノートは正しいです:)

+0

imageNamedキャッシュイメージファイルですが、私のイメージはかなり小さく(40kbから500kb)、まだiPod 2世代のメモリに問題が発生してしまいました。おそらく2世代目にはかなりの量のメモリがありますか? (iphone4で正常に動作します) – REALFREE

+0

そうかもしれません。また、画像の圧縮されたサイズは500kbかもしれませんが、メモリのサイズはかなり大きくなります。長さx幅xピクセルあたりのビット数。インストゥルメントでそれを実行しようとしましたか? – RyanR

+0

いや、楽器で調べたところ、割当ての多くは発生していなかった。割り当てメーターが間違っているため、約1〜2MBの割り当て合計 – REALFREE

関連する問題