[2016 Aug] ImageCaching for CellForRow

La carga de una imagen suele ser lenta, y en general considero recomendable realizarlo de manera asíncrona. Así el proceso de cargar la imagen desde disco, interpretarla, redimensionarla se pueden realizar sin interferir en el hilo de atención a las acciones del usuario.


let id = thought.valueForKey("id") as! String
if let cachedImage = ImageCache.sharedCache.imageForKey("image-\(id)") {
cell.picture.image = cachedImage
} else {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let scaledImage = Helper.scaleUIImageToSize(image!, size: size)
ImageCache.sharedCache.setImage(scaledImage, forKey: "image-\(id)")
dispatch_async(dispatch_get_main_queue(), {
cell.picture.image = scaledImage
})
})
}

view raw

code1.swift

hosted with ❤ by GitHub

El mecanismo utilizado es una clase que tiene un diccionario (arreglo asociativo) en memoria e identifica a las imágenes con un key.

El nombre del key debe trabajarse de acuerdo a sí tendremos distintas dimensiones de imágenes en el mismo caché, o si deseamos poder controlar caching para otros elementos. Seguramente podemos utilizar también un library (ej. Haneke).

Aunque esta implementación es simple, sencilla y suficiente para muchos casos.

La fuente de este método es un artículo de Ray Wenderlich acerca de la utilización de Instruments. Y, pues, al verificar el consumo de tiempo de procesador, resalta el trabajo por hacer un Resize de las fotos. Esta tarea desaparece cuando se cuenta con las fotos ya redimensionadas en el caché.

https://www.raywenderlich.com/97886/instruments-tutorial-with-swift-getting-started

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s