Sobes.tech
Junior — Middle

¿Puede explicar qué se entiende por el término 'Unowned' en el contexto de la gestión de memoria?

sobes.tech AI

Respuesta de la IA

En el contexto de gestión de memoria en iOS (y Swift), el término "Unowned" significa una referencia débil a un objeto que no aumenta el contador de referencias (retain count), pero que asume que el objeto existe durante el uso de esa referencia.

Diferencias con weak:

  • La referencia weak puede volverse nil si el objeto se elimina, por lo que se declara como opcional.
  • La referencia unowned no es opcional y no se establece automáticamente en nil. Si el objeto al que se refiere unowned es eliminado, un intento de acceder a él provocará un error en tiempo de ejecución (crash).

Se usa cuando se garantiza que la vida del objeto referenciado será mayor o igual a la vida de la referencia.

Ejemplo:

class Owner {
    var pet: Pet?
}

class Pet {
    unowned let owner: Owner
    init(owner: Owner) {
        self.owner = owner
    }
}

let owner = Owner()
owner.pet = Pet(owner: owner)

Aquí, Pet mantiene una referencia unowned a Owner, asumiendo que Owner vive más que Pet.