Qual è la differenza tra l'uso delle parole chiave 'unowned' e 'strong' nella dichiarazione di riferimenti in Swift?
sobes.tech AI
Risposta dell'AI
In Swift, le parole chiave strong e unowned vengono utilizzate per gestire i riferimenti e prevenire i cicli di ritenzione (retain cycles).
-
strong — è un riferimento forte standard che aumenta il contatore di riferimenti dell'oggetto. Finché esiste almeno un riferimento forte, l'oggetto non verrà rimosso dalla memoria.
-
unowned — è un riferimento debole, ma non opzionale. Non aumenta il contatore di riferimenti, ma presuppone che l'oggetto a cui si riferisce esista sempre durante l'uso di questa referenza. Se l'oggetto è già stato rimosso, l'accesso alla referenza
unownedprovocherà un errore in fase di esecuzione.
Esempio:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt
Qui, tenant è dichiarato come unowned perché l'appartamento non dovrebbe mantenere la persona con una referenza forte per evitare un ciclo, ma si presume che la persona esista più a lungo dell'appartamento.