Come viene gestita la memoria per i tipi di riferimento in Swift?
sobes.tech AI
Risposta dell'AI
In Swift, la gestione della memoria per i tipi di riferimento (classi) avviene tramite il conteggio automatico delle referenze (ARC, Automatic Reference Counting). Ogni oggetto nell'heap mantiene un contatore di riferimenti: il numero di riferimenti attivi a quell'oggetto. Quando viene creata una nuova referenza a un oggetto, il contatore aumenta, e quando la referenza smette di essere usata, diminuisce. Quando il contatore raggiunge zero, l'oggetto viene automaticamente rimosso dalla memoria.
Esempio:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var a: Person? = Person(name: "Alice") // contatore = 1
var b = a // contatore = 2
b = nil // contatore = 1
a = nil // contatore = 0, oggetto eliminato
È importante evitare cicli di riferimenti (retained cycles), quando due oggetti si riferiscono reciprocamente, impedendo il rilascio della memoria. A tal fine, si usano riferimenti deboli (weak) e senza proprietario (unowned).
I tipi di valore (strutture, enumerazioni) sono memorizzati nello stack e copiati durante l'assegnazione, quindi ARC non si applica a essi.