2014-04-29 12 views
9

Sto utilizzando SDWebImage per scaricare e memorizzare le immagini nella cache. Mi piacerebbe precaricare molte delle immagini nella cache.C'è un modo per precaricare 1000 di immagini usando SDWebImage nella cache senza mostrarle sullo schermo?

C'è un modo semplice per farlo senza dover effettivamente visualizzare l'immagine all'utente? Attualmente sto usando questo codice per la visualizzazione:

[anImageView setImageWithURL:[NSURL URLWithString:@"http://www.sameple.com/myimage.jpg"] 
      placeholderImage:[UIImage imageNamed:@"loadingicon.png"]]; 
+0

Se si desidera scaricare migliaia di immagini, suggerirei di eseguire il proprio metodo. Credo che SDWebImage inizierà a eliminare a un certo punto (non può guardare atm di documenti). – random

+0

Voglio solo che le immagini vengano memorizzate nella cache esattamente come fa SDWebImage (stesso nome, ecc.). Hanno perfezionato il loro caching ... tutto ciò che scrivo potrebbe essere soggetto a bug per i quali hanno già fatto delle correzioni. –

+0

Scrivere il proprio downloader con cache per uno scopo specifico è facile e immediato. Scrivere un downloader e cache per il pubblico da inserire nel progetto è difficile. SDWebImage è molto buono ma non è assolutamente perfetto. Direi che FastImageCache di Path è buono quanto SDWebImage anche se non ho mai messo a confronto i due. – random

risposta

48
[[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:<NArray with image URLs>]; 

Questo sarà gestire il problema di download simultanei per voi (maxConcurrentDownloads).

+0

Eccellente. Verificherò e ti darò la risposta se funziona. –

+0

Anche questo è un buon metodo – random

+3

Lo contrassegnerei come risposta accettata. Richiede la quantità minima di codice e fa esattamente quello che chiede la domanda –

5

Lo SDWebImageManager è la classe dietro l'UIImageView + WebCache categoria. Lega il downloader asincrono con lo store della cache di immagini . È possibile utilizzare questa classe direttamente per trarre vantaggio dal download di immagini Web con memorizzazione nella cache in un altro contesto rispetto a un UIView (ad esempio: con Cacao).

Ecco un semplice esempio di come utilizzare SDWebImageManager:

SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
[manager downloadWithURL:imageURL 
       options:0 
       progress:^(NSInteger receivedSize, NSInteger expectedSize) 
       { 
        // progression tracking code 
       } 
       completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) 
       { 
        if (image) 
        { 
         // do something with image 
        } 
       }]; 

Si potrebbe correre attraverso e fare questo per ogni immagine ... io non sono sicuro di come le prestazioni sarebbe per 1000 di immagini e vorrete assicurarvi e avvertire il vostro utente che cosa state facendo.

Un altro approccio attaccare con SDWebImage sarebbe quello di gestire il proprio NSOperationQueue di SDWebImageDownloaderOperation e utilizzare questo da SDImageCache memorizzarli come finiscono.

/** 
* Store an image into memory and optionally disk cache at the given key. 
* 
* @param image The image to store 
* @param key The unique image cache key, usually it's image absolute URL 
* @param toDisk Store the image to disk cache if YES 
*/ 
- (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk; 

Questo darebbe un po 'più di controllo di come molte operazioni simultanee di download si doveva andare così come un migliore controllo dello stato di conservazione.

Taken from GitHub page.

+0

Grazie! Stavo andando a farli uno per uno in background quindi ho solo una singola connessione alla volta ... Quando si completa, poi avvio quello successivo. Non voglio inondare le attività in background. –

Problemi correlati