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.