Junior — Middle
Les situations liées à l'utilisation de références faibles (non possédées) peuvent-elles entraîner un crash de l'application ? Donnez un exemple.
sobes.tech IA
Réponse de l'IA
Oui, l'utilisation de références faibles (unowned) en Swift peut entraîner un crash de l'application si l'objet auquel la référence non possédée fait référence a déjà été libéré, et qu'une tentative d'accès à cette référence se produit plus tard.
Les références non possédées supposent que l'objet existe toujours tant que la référence est vivante. Si ce n'est pas le cas, l'application plantera avec une erreur "EXC_BAD_ACCESS".
Exemple :
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 // l'objet Person est libéré
// Maintenant apartment.tenant est une référence non possédée à un objet déjà libéré
// Accéder à cette référence provoquera un crash
print(john!.apartment!.tenant) // crash
Pour éviter ces crashs, il faut s'assurer que la référence non possédée ne sera pas utilisée après la libération de l'objet, ou utiliser des références weak, qui deviennent nil après la libération de l'objet.