Sobes.tech
Junior — Middle

¿Qué sucederá con el objeto si solo existe una referencia débil (no poseída) y esta se vuelve inaccesible?

sobes.tech AI

Respuesta de la IA

Si existe solo una referencia débil (unowned) a un objeto, esto significa que el objeto debe estar vivo mientras esa referencia exista. Sin embargo, si el objeto ya ha sido desinicializado (liberado), y una referencia unowned intenta acceder a él, esto provocará un fallo en la aplicación, ya que las referencias unowned no se vuelven nil automáticamente y no mantienen el objeto.

Es decir, una referencia unowned asume que el objeto existe, pero no lo mantiene. Si el objeto se vuelve inaccesible (se libera), y la referencia unowned permanece, intentar acceder a ella provocará un error en tiempo de ejecución.

Ejemplo:

class Owner {
    var child: Child?
}

class Child {
    unowned let owner: Owner
    init(owner: Owner) {
        self.owner = owner
    }
}

var owner: Owner? = Owner()
owner!.child = Child(owner: owner!)
owner = nil // Owner y Child son liberados
// Ahora, la referencia unowned child.owner apunta a un objeto liberado — acceder a ella provocará un fallo