Junior — Middle
¿Pueden las situaciones relacionadas con el uso de referencias débiles (no poseídas) causar fallos en la aplicación? Proporcione un ejemplo.
sobes.tech AI
Respuesta de la IA
Sí, el uso de referencias débiles (unowned) en Swift puede provocar que la aplicación falle si el objeto al que hace referencia la referencia no poseída ya ha sido liberado y se intenta acceder a esa referencia más tarde.
Las referencias no poseídas asumen que el objeto existe siempre que la referencia esté viva. Si no es así, la aplicación se bloqueará con un error "EXC_BAD_ACCESS".
Ejemplo:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
var john: Person? = Person()
john!.apartment = Apartment(tenant: john!)
john = nil // el objeto Person se libera
// Ahora apartment.tenant es una referencia no poseída a un objeto ya liberado
// Intentar acceder a ella provocará un fallo
print(john!.apartment!.tenant) // error
Para evitar estos fallos, debes asegurarte de que la referencia no poseída no se use después de que el objeto haya sido liberado, o usar referencias weak, que se vuelven nil después de que el objeto se libera.