imageNamedを使用しましたが、imageNamedは画像をキャッシュしますが、キャッシュを回避するためにimageWithContentsOfFile:を使用します。
そして、楽器を使うと、それは多くの時間を消費することがわかります。どうすればこれを改善できますか?
imageNamedを使用しましたが、imageNamedは画像をキャッシュしますが、キャッシュを回避するためにimageWithContentsOfFile:を使用します。
そして、楽器を使うと、それは多くの時間を消費することがわかります。どうすればこれを改善できますか?
Instrumentsプロファイリングが何を伝えているかを誤解している可能性があります。4.3%の95%はそれほど多くありません。それはすべて、他に何が起こっているかに依存します。深刻な速度低下が発生していない場合は、不必要に最適化しないでください。
ただし、自分自身に問いかけるのは、物理画像データの配列が本当に必要かどうかです。画像ファイルをUIImageデータビットマップに解凍するには、実際にはかなりの時間がかかります。(この方法でメモリが不足する可能性があることは言うまでもありません。)文字列の配列(pathForResource
文字列)を格納し、必要な場合にのみ画像をフェッチしてみませんか?
最後に、ここにパターンが表示されていることを指摘します。画像13、画像12、画像11などを取得しています。したがって、これを手動で行うコードは非常にばかげています。インデックス番号を教えてくれれば、それに対応する画像をアルゴリズムで教えてくれるからです。
これらのファイルをすべて読み込んで解凍し、非圧縮バージョンにメモリを割り当てて、配列に保存します。それらすべてを前もって必要としますか?一度にロードするのではなく、オンデマンドでロードできますか?これにより、アレイの初期化が引き起こす大ヒットを減らすことができます。
また、画像が実際に表示するよりも大きくないことを確認してください。大きな画像をロードして小さな領域に表示するだけの場合、その大きな画像のロードと解凍に時間がかかります。
[NSBundle mainBundle] pathForResource
:...を使用して次のコードに置き換えてみてください:
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
たとえば、画像ファイルのパスを取得します
UIImage *img= [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@\myImage.png",bundleRoot]];