Sobes.tech
Junior — Middle

Quais razões tornam o uso de Unowned menos preferível em certas situações?

sobes.tech IA

Resposta da IA

A utilização de unowned em iOS (Swift) é menos preferível em situações onde há risco de que o objeto referenciado por unowned possa ser liberado (deallocated) antes de a referência ser usada. Ao contrário de weak, unowned não é opcional e não se torna nil quando o objeto é liberado, portanto, acessar essa referência após a liberação causará uma falha na aplicação (erro em tempo de execução).

Razões para evitar unowned:

  • Se o ciclo de vida do objeto não garante que a referência será sempre válida.
  • Em ligações mútuas complexas, onde a ordem de liberação dos objetos não é clara.

Nesses casos, é melhor usar weak, que se torna automaticamente nil, prevenindo uma terminação inesperada.

Exemplo:

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

class B {
    var a: A?
}

Se o objeto B for liberado antes de A, acessar b em A causará um erro.