DEV Community

Cover image for 🧟 Task Zombies: Cuando [weak self] no es suficiente
Diana Hernández
Diana Hernández

Posted on

🧟 Task Zombies: Cuando [weak self] no es suficiente

Todos lo hemos escrito mil veces:

Task { [weak self] in
    await self?.descargarDatos()
}
Enter fullscreen mode Exit fullscreen mode

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
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

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)