Sobes.tech
Junior — Middle

¿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 unowned provocará 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.