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é
NSCachepara 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.