Sobes.tech
Junior — Middle

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 unowned provocherà 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.