2013-03-06 9 views
8

私は[email protected]という名前の画像を持っています。ファイルのサイズは1KBです。 私のアプリはiPhone専用アプリです。iOS:[UIImage -imageNamed:]をファイル拡張子なしで使用するとパフォーマンスの問題が発生しますか?

私はこの呼び出しで私のアプリで画像を読み込む:

[UIImage imageNamed:@"image"]; 
I/Oの活動を分析するI/Oアクティビティの機器を使用している場合、私はの結果、このファイルに関連するいくつかの活動があることがわかった

"そのようなファイルやディレクトリはありません"というエラーがあり、これらの作業には時間がかかります。

これらの活動は、これらのファイル読み込みのようなものです:

[email protected]~iphone.png 
[email protected]~iphone.png 
[email protected] (this one doesn't fail) 

そして、私の驚きには、すべての失敗した操作は1つが成功したよりも時間がかかります。

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

+0

多少の関連性 - http://stackoverflow.com/questions/7599030/uiimage-imagenamed-extension – Krishnabhadra

+0

@CarmeloS。 "ファイル拡張子の原因でパフォーマンスの問題がない"という答えが得られました。 ? –

+0

@ラジャパディアンの回答を参照してください。) – CarmeloS

答えて

5

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

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

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

アプリのパフォーマンスを改善するためにimageNamed:を使用しないことをおすすめしません。通常、その方法を使用すると、逆のことが成り立ち、イメージの読み込みがより最適化されます(キャッシング)。ただし、特定のイメージが再度ロードされないことが確認され、ファイルシステムの過度の検索が行われないようにするには、imageWithContentsOfFile:を使用します。さらに、メモリ使用量が重要な場合は、実際にはimageWithContentsOfFile:を使用することをお勧めします。

+0

後者がキャッシングや最適化を行わない場合、Dwayneはすでに "やっている"のように "imageNamed"を使用するべきですか? –

+0

ああ、私はOPが拡張の推測を避けたいとは思わない、彼が望んでいるのはそれのためにパフォーマンスの問題を避けることだ。また、イメージキャッシングは、パフォーマンスにプラスの影響を与える非常に重要な機能です。私はこれが質問に答えるとは思わない。 – Krishnabhadra

+0

キャッシングはキャッシュヒットのパフォーマンスを改善するだけです。だから私は、OPがミスを防ぐことができると思った。 – Till

関連する問題