Junior — Middle
Le situazioni legate all'uso di riferimenti deboli (non posseduti) possono causare il crash dell'applicazione? Fornisci un esempio.
sobes.tech AI
Risposta dell'AI
Sì, l'uso di riferimenti deboli (unowned) in Swift può causare il crash dell'applicazione se l'oggetto a cui si riferisce il riferimento non posseduto è già stato liberato e si tenta di accedere a tale riferimento più tardi.
I riferimenti non posseduti assumono che l'oggetto esista sempre finché il riferimento è vivo. Se non è così, l'applicazione si bloccherà con un errore "EXC_BAD_ACCESS".
Esempio:
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'oggetto Person viene liberato
// Ora apartment.tenant è un riferimento non posseduto a un oggetto già liberato
// Tentare di accedervi causerà un crash
print(john!.apartment!.tenant) // crash
Per evitare questi crash, assicurarsi che il riferimento non posseduto non venga usato dopo che l'oggetto è stato liberato, o usare riferimenti weak, che diventano nil dopo la liberazione dell'oggetto.