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];
- ¿Por qué las vistas de tabla de iOS usan métodos de delegado cuando las vistas de tabla de macOS usan enlaces?
- Cómo encontrar errores en una aplicación (Android, iOS)
- ¿Cuál es la mejor compañía de terceros para enviar notificaciones push en sus aplicaciones de Android / iOS? ¿Cuáles son algunos pros y contras de esa empresa?
- ¿Cuál es la principal diferencia entre .xib y storyboard en ios?
- ¿Cuál es la mejor manera de encontrar y contratar un buen desarrollador de iPhone en la ciudad de Nueva York?
Observe el parámetro cachePolicy. Esto configura el uso de la memoria caché predeterminada. Las siguientes opciones están disponibles:
- NSURLRequestUseProtocolCachePolicy,
- NSURLRequestReloadIgnoringLocalCacheData,
- NSURLRequestReturnCacheDataElseLoad,
- 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.