Sto creando un'app per iPhone che estrae i dati da un'API Web, inclusi gli indirizzi email. Mi piacerebbe visualizzare un'immagine associata a ciascun indirizzo email nelle celle della tabella, quindi sto cercando nella rubrica le immagini e ricomincio da un valore predefinito se l'indirizzo email non è nel libro. Questa grande opera, ma ho alcune preoccupazioni:Qual è l'approccio migliore alla cache di immagini asincrone su iPhone?
prestazioni: Le ricette che ho trovato per la ricerca di un indirizzo libretto per indirizzo e-mail (o il numero di telefono) sono riferito rather slow. La ragione di questo è che si deve scorrere su ogni record della rubrica, e per ognuno che ha un'immagine, iterare su tutti gli indirizzi e-mail per trovare una corrispondenza. Questo può richiedere molto tempo per una grande rubrica, naturalmente.
celle di tabella: Così ho pensato di raccogliere tutti gli indirizzi email per cui ho bisogno di trovare le immagini e trovare tutti in una volta. In questo modo, faccio scorrere il libro solo una volta per tutti gli indirizzi. Ma questo non funziona bene per le celle di una tabella, dove ogni cella corrisponde a un singolo indirizzo email. Dovrei raccogliere tutte le immagini prima di visualizzare qualsiasi cella (potenzialmente lenta), o fare in modo che ogni cella cerchi ogni immagine mentre carica (anche più lentamente, poiché dovrei scorrere il libro per trovare una corrispondenza per ogni indirizzo e-mail).
Asynchronous Lookup: Allora ho pensato che li avrei lo sguardo alla rinfusa, ma in modo asincrono, utilizzando
NSInvocationOperation
. Per ogni immagine trovata in AddressBook, salverei una miniatura nella sandbox dell'app. Quindi ogni cella può solo fare riferimento a questo file e mostrare il valore predefinito se non esiste (perché non è nel libro o non è stato ancora trovato). Se l'immagine viene in seguito trovata nella ricerca asincrona, la prossima volta che l'immagine deve essere visualizzata sembrerebbe apparire all'improvviso. Questo potrebbe funzionare bene per la rigenerazione periodica delle immagini (per quando le immagini sono state modificate nella rubrica, ad esempio). Ma poi per qualsiasi istanza della mia app, un'immagine potrebbe non apparire per un po '.Asynchronous Tabella Cell Lookup: Idealmente, mi piacerebbe usare qualcosa di simile markjnet's asynchronous table cell updating aggiornare celle della tabella con un'immagine una volta che è stato scaricato. Ma per farlo funzionare, dovrei eseguire un lavoro di
NSInvocationOperation
per ogni cella come viene visualizzata e se l'icona memorizzata nella cache non è presente nella sandbox. Ma poi siamo tornati a iterare in modo inefficiente attraverso l'intera rubrica per ognuno di essi, e questo può essere un sacco di loro se hai appena scaricato un sacco di nuovi indirizzi email.
Quindi la mia domanda è: come fanno gli altri? Stavo armeggiando con Tweetie2, e sembra che aggiorni le celle della tabella visualizzate in modo asincrono. Presumo che stia inviando una richiesta HTTP separata per ogni immagine di cui ha bisogno. Se è così, immagino che la ricerca nella rubrica locale via e-mail non sia meno efficiente, quindi forse questo è l'approccio migliore? Non ti preoccupare dei problemi di prestazioni associati alla ricerca nella rubrica?
In tal caso, sta salvando un'immagine in miniatura nella sandbox l'approccio migliore alla memorizzazione nella cache? E se volessi creare un nuovo lavoro per aggiornare tutte le anteprime con eventuali cambiamenti nella rubrica dire una volta al giorno, qual è l'approccio migliore per farlo?
In che modo il resto di voi risolve questo tipo di problema? I suggerimenti sarebbero molto apprezzati!
Grazie. Quindi, ho effettivamente implementato una soluzione che cerca un indirizzo alla volta, ma crea una miniatura e la salva nella directory dei documenti sandbox. E sì, cerca solo le immagini nella rubrica la prima volta che devono essere visualizzate.I * think * il caricamento dell'immagine cache dalla sandbox dovrebbe essere abbastanza veloce da non dover essere asincrona. Non ho bisogno del livello di attualità che descrivi, quindi seguirò come pianificare gli aggiornamenti regolari delle miniature memorizzate nella cache - e sì, eseguirò l'iterazione solo attraverso la rubrica una volta per tutte loro. – theory
Solo curioso, come è possibile cercare un indirizzo alla volta, ma solo una volta scorrere la rubrica? – erikprice