Todos lo hemos escrito mil veces:
Task { [weak self] in
await self?.descargarDatos()
}
Usamos [weak self] religiosamente para evitar memory leaks. ✅ Problema resuelto, ¿verdad?
Pues no del todo.
El problema que no sabías que tenías
Imagina esta situación super común:
class PerfilViewController {
func cargarPerfil() {
Task { [weak self] in
let foto = await descargarFotoGigante() // 10 segundos
self?.imagenPerfil.image = foto
}
}
}
El usuario abre el perfil, pero a los 2 segundos se arrepiente y cierra la pantalla.
¿Qué pasa?
- ✅ El ViewController se destruye
- ✅ self se vuelve nil
- ✅ No hay memory leak
- ❌ PERO la descarga sigue corriendo 8 segundos más 🧟
Estás desperdiciando batería, datos y CPU en algo que nadie va a ver.
La demostración: 3 casos reales
Me puse a investigar esto y creé una app de prueba con 3 casos para entender qué estaba pasando realmente.
Puedes leer mas sobre esto en mi blog...
https://dianait.blog/blog/task-zombies-cuando-weak-self-no-es-suficiente/
Top comments (0)