Junior — Middle
O que acontece com o objeto se existir apenas uma referência não forte (unowned) a ele e ela se tornar inacessível?
sobes.tech IA
Resposta da IA
Se existir apenas uma referência fraca (unowned) a um objeto, isso significa que o objeto deve estar vivo enquanto essa referência existir. No entanto, se o objeto já foi desinicializado (liberado), e uma referência unowned tenta acessá-lo, isso causará uma falha na aplicação, pois referências unowned não se tornam nil automaticamente e não mantêm o objeto.
Ou seja, uma referência unowned assume que o objeto existe, mas não o mantém. Se o objeto se tornar inacessível (for liberado), e a referência unowned permanecer, uma tentativa de acessá-la causará um erro em tempo de execução.
Exemplo:
class Owner {
var child: Child?
}
class Child {
unowned let owner: Owner
init(owner: Owner) {
self.owner = owner
}
}
var owner: Owner? = Owner()
owner!.child = Child(owner: owner!)
owner = nil // Owner e Child são liberados
// Agora, a referência unowned child.owner aponta para um objeto liberado — acessá-la causará um crash