Instruments til allokeringer og leaks
Spor heap-allokeringer, find memory leaks og zombieobjekter.
Instruments til allokeringer og leaks er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.
Allocations-instrumentet
Allocations-instrumentet registrerer hver heap-allokering og deallokering og viser hukommelsesvæksten over tid.
// Instruments → Allocations template
// Shows live bytes, allocation count, and transient objectsAnalyse af heap-vækst
Brug din app, og hold øje med grafen over aktive bytes. Stabil vækst uden et plateau tyder på en hukommelseslækage.
// Normal: allocations rise and fall as views appear/disappear
// Leak: allocations only grow, never releasedGenerationsanalyse
Markér et generationssnapshot før og efter et brugerforløb for at se, hvilke objekter der uventet blev bevaret.
// 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 releasedLeaks-instrumentet
Leaks-instrumentet scanner med jævne mellemrum heapen og identificerer objekter, der er allokeret, men ikke kan nås (retain-cyklusser).
// Run Leaks alongside Allocations in the "Leaks" template
// Red bars in the timeline = leaked objects detected
// Click a bar to see the leaked object graphLæsning af lækagegrafen
Objektgrafen for lækager viser, hvilke objekter der fastholder hinanden i en cyklus, og identificerer roden til retain-cyklussen.
// Example cycle:
// ViewController → ViewModel → Closure → ViewController
// Instruments draws the reference edges visuallyRegistrering af retain-cyklusser i closures
Den mest almindelige lækage er, at en closure fastholder self stærkt, mens self selv holder på closuren.
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) }
}
}VM Tracker-instrumentet
VM Tracker viser virtuelle hukommelsesområder og ændrede sider. Et højt pres fra ændret hukommelse får iOS til at afslutte din app.
// Instruments → "VM Tracker" in allocation instrument
// Look for: large __DATA dirty pages, high CG raster memoryZombie-objekter
Aktivér Zombie Objects i Instruments for at fange objekter, der er frigivet for mange gange — de omdannes til "zombier", som logger, når der tilgås dem.
// Instruments → Edit → Record Settings → Enable Zombie Objects
// Accessing a zombie prints: "*** -[MyObject method] sent to deallocated instance"Heap-øjebliksbilleder
Sammenlign to heap-tilstande med "Heap Shot" for at finde objekter, der overlever mellem øjebliksbillederne — det er nyttigt til at finde lækager i visningscontrollere.
// After navigating to and from a screen twice:
// Heap should return to baseline
// Objects remaining in the diff = leaked view controllers or modelsMetricKit til hukommelse i produktion
Brug MXMetricPayload til at indsamle hukommelses- og ydelsesdata fra rigtige brugere i produktion.
import MetricKit
class AppDelegate: UIApplicationDelegate, MXMetricManagerSubscriber {
func didReceive(_ payloads: [MXMetricPayload]) {
payloads.forEach { print($0.memoryMetrics as Any) }
}
}Hurtigt tjek
Hvad angiver en støt voksende graf over "aktive bytes" i Allocations-instrumentet?
Opsummering af lektionen
Brug Allocations til at følge heap-vækst og generationssnapshots. Brug Leaks til at registrere retain-cyklusser og se objektgrafen. Brug Zombie Objects til fejl, hvor objekter frigives for mange gange. Ret closures med [weak self]. Brug MetricKit til at følge hukommelsesforbruget hos rigtige brugere i produktion.
Lær Swift med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 122
- Lektioner
- 409
Ofte stillede spørgsmål
Er lektionen “Instruments til allokeringer og leaks” gratis?
Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Instruments til allokeringer og leaks”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Instruments til allokeringer og leaks”?
Spor heap-allokeringer, find memory leaks og zombieobjekter. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Swift Academy?
Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Instruments til allokeringer og leaks”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Swift Academy-lektion?
Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundlæggende om Instruments: Time Profiler
- Instruments til allokeringer og leaks
- Main Thread Checker og hængninger
- Optimering af hot paths: COW, inlining og specialisering