1

いくつかのファイルをダウンロードしようとしています。

セルごとに、ファイルが存在し、既にディレクトリに保存されているかどうかを確認し、そうでない場合はダウンロードします。

しかし、次の 2 つのセルのファイルもダウンロードします。

非表示のセルのファイルを事前にダウンロードしようとしているのに、ユーザーがセルまでスクロールしても、ファイルがまだ完全にダウンロードされていない場合はどうなりますか。

2回ダウンロードされないようにする方法はありますか? ファイルが既にダウンロードされていることを知る方法はありますか?

私は AFNetworking を使用しています。

4

1 に答える 1

4

あなたがやろうとしていることには名前があり、それはcachingです。

AFNetworking公式のFAQに従ってすでに実装しています

AFNetworking にはキャッシュ メカニズムが組み込まれていますか?

AFNetworkingNSURLCacheおよびそのサブクラスによってすでに提供されているキャッシング機能を利用します。NSURLRequestオブジェクトに正しいキャッシュ ポリシーがあり、サーバーの応答に有効な Cache-Control ヘッダーが含まれている限り、応答は後続の要求のために自動的にキャッシュされます。

次のようにキャッシュを設定すると、問題ありません

- (void)setupCache {
    NSURLCache *urlCache = [[NSURLCache alloc] initWithMemoryCapacity:1024*1024*4 // 1MB mem cache
                                                         diskCapacity:1024*1024*5 // 5MB disk cache
                                                             diskPath:nil];
    [NSURLCache setSharedURLCache:urlCache];
}

次に、通常どおりリクエストを実行するだけで、リソースがキャッシュにある場合はキャッシュ ヒットが発生し、リソースを 2 回ダウンロードすることはありません。


以下のものをサポートする必要がある場合は、次iOS5のような代替 URL キャッシュを使用し、SDURLCache次のように設定する必要があることに注意してください。

- (void)setupCache {
    SDURLCache *urlCache = [[SDURLCache alloc] initWithMemoryCapacity:1024*1024   // 1MB mem cache
                                                         diskCapacity:1024*1024*5 // 5MB disk cache
                                                             diskPath:[SDURLCache defaultCachePath]];
    [NSURLCache setSharedURLCache:urlCache];
}

その理由はこの記事でよく説明されていますが、次の引用で要約できます。

iOS5 より前NSURLCacheは、ドキュメンテーションに別の記載があったとしても、リクエストをメモリに保存するだけでした - diskCapacity プロパティは黙って無視されていました

于 2013-08-27T09:19:15.117 に答える