Sobes.tech
Junior — Middle

¿Cómo afecta el uso de unowned a la gestión del ciclo de vida de un objeto en programación?

sobes.tech AI

Respuesta de la IA

En iOS (Swift), la palabra clave unowned se utiliza para declarar una referencia débil a un objeto que no aumenta el contador de referencias, pero que asume que el objeto existirá durante la vida útil de la referencia.

El uso de unowned ayuda a evitar ciclos de retención, que pueden provocar fugas de memoria. A diferencia de weak, la referencia unowned no es opcional y no se vuelve nil después de liberar el objeto, por lo que solo debe usarse si se garantiza que el objeto existirá durante más tiempo que la referencia.

Ejemplo:

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let unit: String
    unowned let tenant: Person
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A", tenant: john)
john.apartment = apt

Aquí, Apartment mantiene una referencia unowned a Person para evitar un ciclo, asumiendo que Person siempre existirá mientras exista Apartment. Si Person se elimina antes, acceder a la referencia unowned provocará un error en tiempo de ejecución.