Allocations- und Leaks-Instruments
Verfolgen Sie Heap-Allokationen und finden Sie Speicherlecks und Zombie-Objekte.
Allocations- und Leaks-Instruments ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Das Allocations-Instrument
Das Allocations-Instrument erfasst jede Heap-Allokation und -Freigabe und zeigt das Speicherwachstum im Zeitverlauf an.
// Instruments → Allocations template
// Shows live bytes, allocation count, and transient objectsAnalyse des Heap-Wachstums
Verwenden Sie Ihre App und beobachten Sie das Diagramm „Live Bytes“. Ein stetiges Wachstum ohne Plateau weist auf ein Speicherleck hin.
// Normal: allocations rise and fall as views appear/disappear
// Leak: allocations only grow, never releasedGenerationen analysieren
Erstellen Sie vor und nach einem Benutzerablauf einen Generations-Snapshot, um zu sehen, welche Objekte unerwartet bestehen bleiben.
// 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 releasedDas Leaks-Instrument
Das Leaks-Instrument durchsucht den Heap regelmäßig und identifiziert Objekte, die zwar allokiert, aber nicht erreichbar sind (Retain-Zyklen).
// Run Leaks alongside Allocations in the "Leaks" template
// Red bars in the timeline = leaked objects detected
// Click a bar to see the leaked object graphDas Leak-Diagramm lesen
Das Objekt-Diagramm von Leaks zeigt, welche Objekte sich gegenseitig in einem Zyklus halten, und grenzt so die Ursache des Retain-Zyklus ein.
// Example cycle:
// ViewController → ViewModel → Closure → ViewController
// Instruments draws the reference edges visuallyRetain-Zyklen in Closures erkennen
Das häufigste Speicherleck: Eine Closure erfasst self stark, während self die Closure hält.
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) }
}
}Das VM-Tracker-Instrument
Der VM Tracker zeigt virtuelle Speicherbereiche und veränderte Speicherseiten. Ein hoher Druck auf den belegten Speicher veranlasst iOS, Ihre App zu beenden.
// Instruments → "VM Tracker" in allocation instrument
// Look for: large __DATA dirty pages, high CG raster memoryZombie-Objekte
Aktivieren Sie in Instruments „Zombie Objects“, um zu früh freigegebene Objekte zu erkennen – sie werden in „Zombies“ umgewandelt und protokollieren jeden Zugriffsversuch.
// Instruments → Edit → Record Settings → Enable Zombie Objects
// Accessing a zombie prints: "*** -[MyObject method] sent to deallocated instance"Heap Shots
Vergleichen Sie mit „Heap Shot“ zwei Heap-Zustände, um Objekte zu finden, die zwischen den Aufnahmen bestehen bleiben – ideal zum Erkennen von Leaks in ViewControllern.
// After navigating to and from a screen twice:
// Heap should return to baseline
// Objects remaining in the diff = leaked view controllers or modelsMetricKit für den Produktionsspeicher
Verwenden Sie MXMetricPayload, um in der Produktion Speicher- und Performancedaten von echten Nutzern zu erfassen.
import MetricKit
class AppDelegate: UIApplicationDelegate, MXMetricManagerSubscriber {
func didReceive(_ payloads: [MXMetricPayload]) {
payloads.forEach { print($0.memoryMetrics as Any) }
}
}Kurze Prüfung
Worauf weist ein stetig wachsendes Diagramm „Live Bytes“ im Allocations-Instrument hin?
Zusammenfassung der Lektion
Verwenden Sie Allocations, um das Heap-Wachstum und Generations-Snapshots zu verfolgen. Verwenden Sie Leaks, um Retain-Zyklen zu erkennen und das Objekt-Diagramm anzuzeigen. Nutzen Sie Zombie Objects für Fehler durch zu frühe Freigaben. Beheben Sie Probleme in Closures mit [weak self]. Verwenden Sie MetricKit, um den Speicherverbrauch echter Nutzer in der Produktion zu verfolgen.
Häufig gestellte Fragen
Ist die Lektion „Allocations- und Leaks-Instruments“ kostenlos?
Ja — der vollständige Text von „Allocations- und Leaks-Instruments“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Allocations- und Leaks-Instruments“?
Verfolgen Sie Heap-Allokationen und finden Sie Speicherlecks und Zombie-Objekte. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Swift Academy zu starten?
Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Allocations- und Leaks-Instruments“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?
Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Instruments-Grundlagen: Time Profiler
- Allocations- und Leaks-Instruments
- Main Thread Checker und Hänger
- Hot Paths optimieren: COW, Inlining und Spezialisierung