Sobes.tech
Junior — Middle

¿Puedes compartir un ejemplo de una mejora técnica realizada en el proyecto y describir su implementación?

sobes.tech AI

Respuesta de la IA

En uno de mis proyectos de iOS, mejoré el rendimiento de carga de imágenes en la lista (UITableView) mediante la implementación de almacenamiento en caché y carga asíncrona.

Implementación:

  • Utilicé NSCache para almacenar las imágenes ya cargadas, evitando volver a descargarlas desde la red.
  • En el método cellForRowAt, verificaba si la imagen estaba en caché; si es así, la mostraba inmediatamente.
  • Si la imagen no estaba en caché, iniciaba una carga asíncrona mediante URLSession, y tras la carga, almacenaba la imagen en caché y actualizaba la celda.

Ejemplo de código:

let imageCache = NSCache<NSString, UIImage>()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    let urlString = imageURLs[indexPath.row]

    if let cachedImage = imageCache.object(forKey: urlString as NSString) {
        cell.imageView?.image = cachedImage
    } else {
        cell.imageView?.image = nil
        DispatchQueue.global().async {
            if let url = URL(string: urlString),
               let data = try? Data(contentsOf: url),
               let image = UIImage(data: data) {
                self.imageCache.setObject(image, forKey: urlString as NSString)
                DispatchQueue.main.async {
                    if let updateCell = tableView.cellForRow(at: indexPath) {
                        updateCell.imageView?.image = image
                        updateCell.setNeedsLayout()
                    }
                }
            }
        }
    }
    return cell
}

Esto redujo significativamente la carga en la red y mejoró la fluidez del desplazamiento.