Swift Academy · Lektion

Instruments för allokeringar och läckor

Spåra heap-allokeringar och hitta minnesläckor och zombieobjekt.

Lektion 2 av 412 steg

Instruments för allokeringar och läckor är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.

Allocations-instrumentet

Allocations-instrumentet spårar varje heap-allokering och frigöring och visar hur minnet växer över tid.

// Instruments → Allocations template
// Shows live bytes, allocation count, and transient objects

Analysera heap-tillväxt

Använd appen och håll uppsikt över diagrammet Live Bytes. En stadig tillväxt utan avplaning tyder på en minnesläcka.

// Normal: allocations rise and fall as views appear/disappear
// Leak: allocations only grow, never released

Generationsanalys

Markera en generationsögonblicksbild före och efter ett användarflöde för att se vilka objekt som oväntat fanns kvar.

// 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 genomsöker heapen regelbundet och identifierar objekt som är allokerade men inte nåbara (retain-cykler).

// 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äsa läckagegrafen

Läckagegrafen visar vilka objekt som håller kvar varandra i en cykel och pekar ut roten till retain-cykeln.

// Example cycle:
// ViewController → ViewModel → Closure → ViewController
// Instruments draws the reference edges visually

Identifiera retain-cykler i closures

Den vanligaste läckan uppstår när en closure fångar self starkt samtidigt som self håller kvar 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 visar virtuella minnesregioner och smutsiga sidor. Högt smutsigt minne får iOS att avsluta appen.

// Instruments → "VM Tracker" in allocation instrument
// Look for: large __DATA dirty pages, high CG raster memory

Zombie-objekt

Aktivera Zombie Objects i Instruments för att upptäcka överfrigjorda objekt — de omvandlas till "zombies" som loggar när de används.

// Instruments → Edit → Record Settings → Enable Zombie Objects
// Accessing a zombie prints: "*** -[MyObject method] sent to deallocated instance"

Heap-bilder

Jämför två heap-tillstånd med "Heap Shot" för att hitta objekt som finns kvar mellan bilderna — utmärkt för att upptäcka läckor i view controllers.

// After navigating to and from a screen twice:
// Heap should return to baseline
// Objects remaining in the diff = leaked view controllers or models

MetricKit för minne i produktion

Använd MXMetricPayload för att samla in minnes- och prestandadata från verkliga användare i produktion.

import MetricKit
class AppDelegate: UIApplicationDelegate, MXMetricManagerSubscriber {
  func didReceive(_ payloads: [MXMetricPayload]) {
    payloads.forEach { print($0.memoryMetrics as Any) }
  }
}

Snabb kontroll

Vad tyder ett stadigt växande diagram över "Live Bytes" på i Allocations-instrumentet?

Sammanfattning av lektionen

Använd Allocations för att spåra heap-tillväxt och generationsögonblicksbilder. Använd Leaks för att upptäcka retain-cykler och visa objektgrafen. Använd Zombie Objects för fel med överfrigöring. Åtgärda closures med [weak self]. Använd MetricKit för att spåra minne hos verkliga användare i produktion.

Gratis att börja

Lär dig Swift med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
122
Lektioner
409

Vanliga frågor

Är lektionen ”Instruments för allokeringar och läckor” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Instruments för allokeringar och läckor”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Instruments för allokeringar och läckor”?

Spåra heap-allokeringar och hitta minnesläckor och zombieobjekt. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Swift Academy?

Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Instruments för allokeringar och läckor”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Swift Academy-lektionen?

Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Grunderna i Instruments: Time Profiler
  2. Instruments för allokeringar och läckor
  3. Main Thread Checker och hängningar
  4. Optimera heta kodvägar: COW, inlining och specialisering
← Tillbaka till Swift Academy