3

私はしばらくの間 S​​DWebImage を使用してすべての画像をキャッシュしていますが、今ではさまざまな種類の画像をグループ化するために複数のキャッシュが必要です。たとえば、それぞれ複数の画像を持つ 3 種類のキャッシュがあるため、実行時にそのうちの 1 つをクリアするか、別のものを使用したいと考えています。setMaxCacheAge

例: types images = car images は 1 つのタイプで、motorcycle は別のタイプです... 飛行機 other.. このように。この画像を保存した後、オートバイの画像 (1 種類) のキャッシュのみを削除またはクリアしたい

今私はこれを持っていますが、キャッシュされたすべての画像用です:

SDImageCache * sDImageCache = [SDImageCache sharedImageCache];
[sDImageCache setMaxCacheAge:60*60*24];

...

SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
[imageCache clearDisk];
[imageCache cleanDisk];

-

これ見たけど本当に欲しいの?

SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"];

非同期イメージ キャッシュを個別に使用する

4

1 に答える 1

3

わかりました、私はその方法を理解しています...そして私は共有します

[SDWebImageManager sharedManager]すべてを手動で行いたいため、最初に のすべての証拠を削除しました。

次に[SDWebImageDownloader sharedDownloader]、新しいイメージを要求queryDiskCacheForKey (SDImageCache)し、ローカル イメージ (ディスクまたはメモリ) を取得します。

どのように:

特定の名前空間で新しい imageCache を作成する

self.imageCache = [[SDImageCache alloc] initWithNamespace:@"nameSpaceImageCacheXPTO"]; [_imageCache setMaxCacheAge:oneHour * 3]; // 3時間

イメージ (キー) が既にキャッシュにあるかどうかを確認し、そうでない場合は新しいイメージを要求して後で保存します

    /////////
    // *    Prepar Key
    /////////

    NSString * key = url.absoluteString;

    /////////
    // *    Get Local Image
    /////////

    [_imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType)               {       
        if (image) {     
            completedBlock(image,nil); // return block
        }else{

            /////////
            // *    Request Image
            /////////

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

                [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:url
                                                                      options:SDWebImageProgressiveDownload
                                                                     progress:^(NSInteger receivedSize, NSInteger expectedSize) {}
                                                                    completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {

                                                                        if (finished && image){

                                                                                /////////
                                                                                // *    Save Image
                                                                                /////////

                                                                          [_imageCacheProgram storeImage:image
                                                                                          recalculateFromImage:NO
                                                                                                     imageData:data
                                                                                                        forKey:key
                                                                                                        toDisk:YES];

                                                                                 completedBlock(image,error); // return block
                                                                        }
                                                                    }];

            });
        }
    }];
于 2014-06-09T10:45:30.000 に答える