¿En qué se diferencia el uso de las palabras clave 'unowned' y 'strong' al declarar referencias en Swift?
sobes.tech AI
Respuesta de la IA
En Swift, las palabras clave strong y unowned se utilizan para gestionar referencias y prevenir ciclos de retención (retain cycles).
-
strong — es una referencia fuerte estándar que incrementa el contador de referencias del objeto. Mientras exista al menos una referencia fuerte, el objeto no será eliminado de la memoria.
-
unowned — es una referencia débil, pero no opcional. No incrementa el contador de referencias, pero asume que el objeto al que se refiere siempre existe durante el uso de esta referencia. Si el objeto ya ha sido eliminado, acceder a la referencia
unownedprovocará un error en tiempo de ejecución.
Ejemplo:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt
Aquí, tenant se declara como unowned porque el apartamento no debe mantener a la persona con una referencia fuerte para evitar un ciclo, pero se asume que la persona existe más tiempo que el apartamento.