/ / L'immagine della UIImage Cache? - obiettivo-c, ios, caching, uiimage

L'immagine della UIImage Cache? - obiettivo-c, ios, caching, uiimage

UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"xx.jpg"]
UIImage *img = [UIImage imageNamed:@"xx.jpg"]

Nel secondo tipo l'immagine verrà memorizzata nella cache?
Mentre nel primo tipo le immagini non vengono memorizzate nella cache?

risposte:

28 per risposta № 1
  • Il -initWithContentsOfFile: crea una nuova immagine senza cache, è un normale metodo di inizializzazione.

  • Il +imageNamed: il metodo utilizza la cache. Ecco una documentazione da Riferimento UII:

    Questo metodo cerca nelle cache di sistema per unoggetto immagine con il nome specificato e restituisce quell'oggetto se esiste. Se un oggetto immagine corrispondente non è già presente nella cache, questo metodo carica i dati dell'immagine dal file specificato, li memorizza nella cache e quindi restituisce l'oggetto risultante.

    UIImage manterrà l'immagine caricata, mantenendola in vita fino a quando la condizione di memoria insufficiente causerà l'eliminazione della cache.

Aggiornamento per Swift: In Swift il UIImage(named: "...") la funzione è quella che memorizza l'immagine nella cache.


9 per risposta № 2

Volevo solo lasciarlo qui per aiutarti a risolvere il problema dei nomi dei percorsi. Questo è un metodo che puoi mettere su UIImage categoria.

+(UIImage *)imageNamed:(NSString *)name cache:(BOOL)cache {
if (cache)
return [UIImage imageNamed:name];
name = [[NSBundle mainBundle] pathForResource:[name stringByDeletingPathExtension] ofType:[name pathExtension]];
UIImage *retVal = [[UIImage  alloc] initWithContentsOfFile:name];
return retVal;
}

Se non si ha un modo semplice per passare alla cache, si potrebbe finire con l'uso di `imageNamed. Questo è un grosso errore nella maggior parte dei casi. questa grande risposta per maggiori dettagli (e alzare sia le domande che le risposte!).


1 per risposta № 3

@Dan Rosenstark rispondi in fretta ..

extension UIImage {

static func imageNamed(name: String, cache: Bool) -> UIImage? {
if (cache) {
return UIImage(named: name)
}

// Using NSString for stringByDeletingPathExtension
let fullName = NSString(string: name)
let fileName = fullName.stringByDeletingPathExtension
let ext = fullName.pathExtension
let resourcePath = NSBundle.mainBundle().pathForResource(fileName, ofType: ext)

if let path = resourcePath {
return UIImage(contentsOfFile: path)
}
return nil
}
}

0 per risposta № 4

Corretto, il secondo elemento viene memorizzato nella cache.