1

どうやら、メモリ不足の問題により、私のアプリは第 2 世代の iPod でクラッシュします。私がしたことは、ユーザーがスクロールしたときに scrollView + pageControl 内の各ビューで image を呼び出すことでした。また、メモリ警告を受け取った後、特定のポイントに到達したときにアプリがクラッシュしました。警告が表示されたときにビューを解放しようとしましたが、それでもクラッシュが発生しました。

ImageNamed: についてググったところ、どうやらこの API 呼び出しに問題があったようですが、ほとんどの記事では、最近の iOS バージョンで修正されたと書かれていました。

imageNamed の代わりに画像 imageWithContentOfFile を呼び出すことでこの問題を修正しましたが、ImageNamed が引き続きメモリ リークを引き起こすか、ビューが解放されたときに解放されないかどうか疑問に思っています。

4

1 に答える 1

7

imageNamed:リークは発生しませんが、使用時にメモリの問題が発生する原因と誤解されることがよくあります。圧縮されていない画像は、ロード後にキャッシュされます。つまり、その画像のコピーがすぐに 2 つメモリに存在します。頻繁に使用される小さな画像 (アイコンなど) に使用する場合、ランタイムがディスクからファイルをフェッチする必要がないため、これは優れています。ファイルはキャッシュ内で既に使用可能です。これがユーザーを悩ませるのはimageNamed:、カメラで撮影した 4MP 画像などの大きな画像を読み込む場合です。その画像はかなりの量のメモリを占有します: 400 万ピクセル、1 ピクセルあたり 4 バイトのタイプ = 16MB のメモリ、2 回。この方法を使用して、スライドショー、写真共有、カメラ アプリなどの画像を読み込むと、非常に速く加算されます。

したがって、これらの機能が必要なものに合わない場合は、他の UIImage 読み込みメソッドのいずれかを使用してください。ユーザーの皆様に感謝いたします。

: この情報は、UIKit レンダリング セッションを提示した Apple エンジニアからのものです (#121 だったと思います)。うまくいけば、私のメモは正しいです:)

于 2011-06-28T01:49:48.217 に答える