Strumenti Allocations e Leaks
Monitorare le allocazioni nell’heap e individuare memory leak e oggetti zombie.
Strumenti Allocations e Leaks è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Strumento Allocations
Lo strumento Allocations traccia ogni allocazione e deallocazione nell'heap, mostrando la crescita della memoria nel tempo.
// Instruments → Allocations template
// Shows live bytes, allocation count, and transient objectsAnalisi della crescita dell'heap
Utilizzi l'app e osservi il grafico Live Bytes. Una crescita costante senza stabilizzazione indica una perdita di memoria.
// Normal: allocations rise and fall as views appear/disappear
// Leak: allocations only grow, never releasedAnalisi delle generazioni
Contrassegni uno snapshot della generazione prima e dopo un flusso utente per vedere quali oggetti sono rimasti in memoria in modo imprevisto.
// Instruments toolbar → "Mark Generation"
// Perform action (e.g., open and close a screen)
// "Mark Generation" again
// Inspect objects in the new generation that weren't releasedStrumento Leaks
Lo strumento Leaks analizza periodicamente l'heap e identifica gli oggetti allocati ma non raggiungibili (cicli di ritenzione).
// Run Leaks alongside Allocations in the "Leaks" template
// Red bars in the timeline = leaked objects detected
// Click a bar to see the leaked object graphLettura del grafo delle perdite
Il grafo degli oggetti di Leaks mostra quali oggetti mantengono riferimenti reciproci formando un ciclo, individuando la radice del ciclo di ritenzione.
// Example cycle:
// ViewController → ViewModel → Closure → ViewController
// Instruments draws the reference edges visuallyRilevamento dei cicli di ritenzione nelle closure
La perdita più comune si verifica quando una closure cattura self con un riferimento forte mentre self mantiene la closure.
class MyVC: UIViewController {
var onComplete: (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
// LEAK: closure captures self; self holds onComplete
onComplete = { self.dismiss(animated: true) }
// FIX:
onComplete = { [weak self] in self?.dismiss(animated: true) }
}
}Strumento VM Tracker
VM Tracker mostra le regioni della memoria virtuale e le pagine sporche. Un'elevata pressione sulla memoria sporca induce iOS a terminare l'app.
// Instruments → "VM Tracker" in allocation instrument
// Look for: large __DATA dirty pages, high CG raster memoryOggetti zombie
Attivi Zombie Objects in Instruments per rilevare gli oggetti rilasciati troppe volte: vengono trasformati in "zombie" che registrano un messaggio quando vi si accede.
// Instruments → Edit → Record Settings → Enable Zombie Objects
// Accessing a zombie prints: "*** -[MyObject method] sent to deallocated instance"Snapshot dell'heap
Confronti due stati dell'heap con "Heap Shot" per trovare gli oggetti che sopravvivono tra uno snapshot e l'altro: è un metodo efficace per rilevare perdite nei view controller.
// After navigating to and from a screen twice:
// Heap should return to baseline
// Objects remaining in the diff = leaked view controllers or modelsMetricKit per la memoria in produzione
Utilizzi MXMetricPayload per raccogliere dati sulla memoria e sulle prestazioni dagli utenti reali in produzione.
import MetricKit
class AppDelegate: UIApplicationDelegate, MXMetricManagerSubscriber {
func didReceive(_ payloads: [MXMetricPayload]) {
payloads.forEach { print($0.memoryMetrics as Any) }
}
}Verifica rapida
Che cosa indica un grafico "Live Bytes" in costante crescita nello strumento Allocations?
Riepilogo della lezione
Utilizzi Allocations per monitorare la crescita dell'heap e gli snapshot delle generazioni. Utilizzi Leaks per rilevare i cicli di ritenzione e visualizzare il grafo degli oggetti. Utilizzi Zombie Objects per i bug causati da rilasci eccessivi. Risolva i problemi nelle closure con [weak self]. Utilizzi MetricKit per monitorare la memoria degli utenti reali in produzione.
Domande Frequenti
La lezione «Strumenti Allocations e Leaks» è gratuita?
Sì — il testo completo di «Strumenti Allocations e Leaks» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «Strumenti Allocations e Leaks»?
Monitorare le allocazioni nell’heap e individuare memory leak e oggetti zombie. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Strumenti Allocations e Leaks»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Fondamenti di Instruments: Time Profiler
- Strumenti Allocations e Leaks
- Main Thread Checker e blocchi
- Ottimizzare gli hot path: COW, inlining e specializzazione