¿Cuál es la mejor manera de manejar el almacenamiento en caché de imágenes en iOS?

Hay algunas opciones para el almacenamiento en caché de imágenes:

1. Use el caché interno provisto por NSURLConnection. Esta es la clase nativa para realizar solicitudes web.

NSURLRequest * req = [NSURLRequest requestWithURL: url cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 15];
NSURLConnection * conn = [NSURLConnection connectionWithRequest: req delegate: self];

Observe el parámetro cachePolicy. Esto configura el uso de la memoria caché predeterminada. Las siguientes opciones están disponibles:

  1. NSURLRequestUseProtocolCachePolicy,
  2. NSURLRequestReloadIgnoringLocalCacheData,
  3. NSURLRequestReturnCacheDataElseLoad,
  4. NSURLRequestReturnCacheDataDontLoad

Puedes leer más sobre esto aquí.

También puede configurar su propio caché usando NSURLCache:

NSURLCache * URLCache = [[NSURLCache alloc] initWithMemoryCapacity: 4 * 1024 * 1024 diskCapacity: 20 * 1024 * 1024 diskPath: nil];
[NSURLCache setSharedURLCache: URLCache];

2. Uso de un componente de terceros como SDWebImage.

Esto simplifica bastante todo el proceso de configurar un caché y hacer solicitudes de URL. Es un descargador de imágenes asíncrono con soporte de caché.

SDWebImageManager * manager = [SDWebImageManager sharedManager];
[manager downloadWithURL: opciones de imageURL: 0 progreso: ^ (NSInteger recibió el tamaño, NSInteger espera el tamaño) {
// código de seguimiento de progresión
}
completado: ^ (imagen UIImage *, error NSError *, SDImageCacheType cacheType, BOOL terminado) {
if (imagen) {
// hacer algo con la imagen}
}];

Personalmente, prefiero usar SDWebImageManager.