2

いくつかの画像の単純な iOS キャッシュ システムに取り組んでいます。UIImage 自体とその識別子を追跡する必要があります。現在、キャッシュされた正しいイメージにアクセスするためのより高速で効率的な方法を見つけようとしています。

オプション1:

for (CachedImage* image in [cachedImageArray]
{
  if ([[image identifier] isEqualToString:@"id_12345"]
  { 
    // use that image
  }
}

オプション 2:

UIImage* imageToRetrieve = [cachedImagesDictionary objectForKey:@"id_12345"

いずれかの方法を使用するメリットはありますか? もしそうなら、それは無視できないものですか?ありがとう。

4

3 に答える 3

7

O(1)辞書は、検索を効率化するために何らかのハッシュ アルゴリズムを使用するため (通常はの代わりに) 、おそらく高速になりますO(n)。キャッシュ内の要素数が多い場合、無視できなくなります。

CFDictionary.hから

計算の複雑
さ ディクショナリ内の値のアクセス時間は、現在および将来のどの実装でも最悪 O(lg N) であることが保証されていますが、多くの場合 O(1) (一定時間) になります。挿入または削除操作も通常は一定時間ですが、実装によっては最悪の場合 O(N*lg N) になります。キーを介した値へのアクセスは、値に直接アクセスするよりも高速です (そのような操作がある場合)。辞書は、同じ数の値を持つ配列よりもはるかに多くのメモリを使用する傾向があります。

于 2013-02-18T21:28:05.680 に答える
5

いずれかの方法を使用するメリットはありますか?

はい。

UIImage *imageToRetrieve = [cachedImagesDictionary objectForKey:@"id_12345"];

はるかに読みやすいです

(ああ、パフォーマンスのことですか? 心配する必要はありません。時期尚早の最適化は、ほとんどすべての問題の根源です。)

于 2013-02-18T21:28:18.457 に答える