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