8

.Fileという名前の画像がありimage@2x.pngます。ファイルのサイズは1KBです。私のアプリはiPhone専用アプリです。

この呼び出しでアプリに画像をロードします:

[UIImage imageNamed:@"image"];

I/Oアクティビティを分析するI/Oアクティビティ機器を使用すると、このファイルに関連するアクティビティがいくつかあり、「そのようなファイルまたはディレクトリはありません」というエラーが発生し、これらのアクティビティには時間がかかることがわかりました。

これらのアクティビティは、これらのファイルを読み取るようなものです。

image_2_only_@2x~iphone.png
image@2x~iphone.png
image@2x.png (this one doesn't fail)

そして驚いたことに、失敗した操作はすべて、成功した操作よりも時間がかかります。

この種のパフォーマンスの問題を回避するにはどうすればよいですか?

4

1 に答える 1

5

大量のファイルシステムアクセスを防止したい場合は、を使用しないで[UIImage imageNamed:]ください[UIImage imageWithContentsOfFile:]

後者は、画像の自動選択(拡張推測、網膜推測など)を実行せず、メモリキャッシュを使用しません。

私の提案を使用する場合、ファイルシステム上の画像への重複アクセスは非常に厳しく罰せられることを覚えておいてください。

imageNamed:アプリのパフォーマンスを向上させるために使用しないことはお勧めしません。通常、その逆が当てはまり、その方法を使用すると、画像の読み込みがより最適化(キャッシュ)されます。ただし、特定のイメージが再度ロードされないことが確実になり、過度のファイルシステムルックアップを防ぐために、を使用しますimageWithContentsOfFile:。さらに、メモリ使用量がポイントである場合に使用することを実際に推奨しimageWithContentsOfFile:ます。キャッシュがないということは、メモリの占有が少ないことを意味します。

于 2013-03-06T03:47:28.513 に答える