¿La image del caching UIImage?

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

En el segundo tipo, ¿la image se almacenará en caching?
Mientras que en el primer tipo, las imágenes no se almacenan en caching.

  • The -initWithContentsOfFile: crea una nueva image sin almacenamiento en caching, es un método de initialization ordinario.

  • El método +imageNamed: usa caching. Aquí hay una documentation de UIImage Reference :

    Este método busca en las cachings del sistema un object de image con el nombre especificado y devuelve ese object si existe. Si un object de image coincidente no está en la caching, este método carga los datos de la image del file especificado, lo almacena en caching y luego devuelve el object resultante.

    UIImage retendrá la image cargada, manteniéndola viva hasta que la baja condición de la memory haga que se purgue la caching.

Actualización para Swift: en Swift, la function UIImage(named: "...") es la que almacena en caching la image.

Solo quería dejar esto aquí para ayudar a lidiar con el problema de las routes de acceso. Este es un método que puede poner en una categoría UIImage .

 +(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; } 

Si no tiene una manera fácil de cambiar a la memory caching, puede terminar simplemente usando `imageNamed. Este es un gran error en la mayoría de los casos. Mira esta excelente respuesta para get más detalles (¡y recapitula tanto la pregunta como la respuesta!).

@ Dan Rosenstark contesta rápidamente …

 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 } } 

Correcto, el segundo elemento se almacena en caching.