Junior — Middle
Puoi elencare i principali tipi di perdite di memoria che possono verificarsi durante la programmazione in Swift?
sobes.tech AI
Risposta dell'AI
In Swift, i principali tipi di perdite di memoria sono legati ai cicli di riferimenti (retains cycles), che si verificano quando gli oggetti si tengono reciprocamente, e ARC (Automatic Reference Counting) non può liberare la memoria. I casi principali:
- Cicli di riferimenti tra classi: due oggetti di classe con riferimenti forti tra loro.
- Chiusure che catturano self: se una chiusura cattura self senza usare
[weak self]o[unowned self], ciò porta a un ciclo. - Riferimenti forti nei delegati: se il delegato è dichiarato come riferimento forte, e l'oggetto delegato si riferisce indietro.
Esempio di fuga con una chiusura:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // cattura self con riferimento forte
}
}
}
Per evitarlo, si usano riferimenti deboli:
closure = { [weak self] in
guard let self = self else { return }
print(self)
}
In questo modo, l'aspetto principale è controllare i riferimenti forti e usare riferimenti deboli o senza proprietario dove necessario.