Junior — Middle
Situações relacionadas com o uso de referências fracas (não possuídas) podem levar a uma falha na aplicação? Dê um exemplo.
sobes.tech IA
Resposta da IA
Sim, o uso de referências não possuídas (unowned) em Swift pode levar à falha da aplicação se o objeto ao qual a referência não possuída se refere já tiver sido liberado, e uma tentativa de aceder a essa referência ocorrer mais tarde.
Referências não possuídas assumem que o objeto existe sempre que a referência estiver viva. Se não for o caso, a aplicação irá falhar com um erro "EXC_BAD_ACCESS".
Exemplo:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
var john: Person? = Person()
john!.apartment = Apartment(tenant: john!)
john = nil // o objeto Person é liberado
// Agora apartment.tenant é uma referência não possuída a um objeto já liberado
// Tentar aceder a ela causará uma falha
print(john!.apartment!.tenant) // crash
Para evitar esses erros, deve garantir que a referência não possuída não será usada após a libertação do objeto, ou usar referências weak, que se tornam nil após a libertação do objeto.