Sobes.tech
Junior — Middle

¿Qué razones hacen que el uso de Unowned sea menos preferible en ciertas situaciones?

sobes.tech AI

Respuesta de la IA

El uso de unowned en iOS (Swift) es menos preferible en situaciones donde existe el riesgo de que el objeto al que se hace referencia con unowned pueda ser liberado (deallocated) antes de que se utilice la referencia. A diferencia de weak, unowned no es opcional y no se vuelve nil al liberar el objeto, por lo que acceder a dicha referencia después de la liberación provocará un fallo en la aplicación (error en tiempo de ejecución).

Razones para evitar unowned:

  • Si el ciclo de vida del objeto no garantiza que la referencia siempre será válida.
  • En enlaces mutuos complejos, donde el orden de liberación de objetos no es evidente.

En tales casos, es mejor usar weak, que se vuelve automáticamente nil, evitando una terminación abrupta.

Ejemplo:

class A {
    unowned var b: B
    init(b: B) { self.b = b }
}

class B {
    var a: A?
}

Si el objeto B se libera antes que A, acceder a b en A provocará un error.