Swift Academy · Lektion

Instruments til allokeringer og leaks

Spor heap-allokeringer, find memory leaks og zombieobjekter.

Lektion 2 af 412 trin

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 objects

Analyse 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 released

Generationsanalyse

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 released

Leaks-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 graph

Læ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 visually

Registrering 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 memory

Zombie-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 models

MetricKit 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.

Gratis at komme i gang

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

  1. Grundlæggende om Instruments: Time Profiler
  2. Instruments til allokeringer og leaks
  3. Main Thread Checker og hængninger
  4. Optimering af hot paths: COW, inlining og specialisering
← Tilbage til Swift Academy