Un referencia weak no retiene el objeto, pero en versiones antiguas de Swift su memoria sí sobrevivía a su deinit.
El objeto se convertía en un zombie: destruido lógicamente, pero vivo en memoria hasta que alguien leía la última referencia débil.
Swift 4 lo resolvió con las side tables. Hoy la memoria se libera de inmediato. Solo sobrevive una pequeña estructura auxiliar.
Todos los detalles en un nuevo artículo: https://blog.arturorivas.com/posts/arc-de-zombie-objects-a-side-tables/

ARC y zombies en Swift
🧠 ARC (Automatic Reference Counting) lleva con nosotros desde el primer día en Swift, pero la mayoría de desarrolladores solo conoce su capa exterior: los objetos se retienen, se liberan y se destruyen cuando el contador llega a cero. Lo que muy pocos saben es que el modelo interno ha cambiado de forma significativa desde las primeras versiones del lenguaje. Esos cambios no son detalles de implementación irrelevantes: explican por qué ciertas decisiones de diseño tienen un coste, y por qué el runtime se comporta de una manera u otra en situaciones límite.




