Grundlagen von ARC: strong / weak / unowned
Lernen Sie die Referenzzählung von ARC kennen und wann Sie strong , weak und unowned verwenden sollten, um Speicherlecks zu vermeiden.
Grundlagen von ARC: strong / weak / unowned ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. 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 3 Lektionen.
ARC in einer Minute
Swift verwendet ARC (Automatic Reference Counting). Jede strong-Referenz erhöht den Zähler einer Klasseninstanz. Fällt er auf null, wird deinit ausgeführt und der Speicher freigegeben.
Standardmäßig strong
Strong ist der Standard. Wenn die letzte strong-Referenz wegfällt, wird deinit aufgerufen.
final class Person {
let name: String
init(_ name: String) { self.name = name; print("init:", name) }
deinit { print("deinit:", name) }
}
var p: Person? = Person("Ada")
p = nil // ARC count -> 0, triggers deinitBeispiel für einen Zyklus
Zwei wechselseitige strong-Referenzen erzeugen einen Retain-Zyklus. ARC kann die Objekte nicht freigeben, wodurch ein Leak entsteht.
final class A {
var b: B?
deinit { print("A deinit") }
}
final class B {
var a: A?
deinit { print("B deinit") }
}
var a: A? = A()
var b: B? = B()
a?.b = b // strong
b?.a = a // strong
a = nil // no deinit (cycle)
b = nil // still no deinit (leak)weak-Referenz
Machen Sie eine Seite weak, um den Zyklus zu vermeiden. Weak-Referenzen sind optional und werden automatisch zu nil, wenn das Objekt freigegeben wird.
final class A2 {
weak var b: B2? // weak breaks the strong cycle
deinit { print("A2 deinit") }
}
final class B2 {
var a: A2?
deinit { print("B2 deinit") }
}
var a2: A2? = A2()
var b2: B2? = B2()
a2?.b = b2 // weak
b2?.a = a2 // strong
a2 = nil // A2 deinit runs
b2 = nil // B2 deinit runsunowned-Referenz
Verwenden Sie unowned, wenn das referenzierte Objekt länger lebt als diese Referenz. Die Referenz ist nicht optional und wird nicht auf nil gesetzt; greifen Sie nach der Freigabe auf sie zu, stürzt das Programm ab – garantieren Sie daher die Lebensdauer.
final class Customer {
let name: String
var card: CreditCard?
init(_ name: String) { self.name = name }
deinit { print("Customer deinit") }
}
final class CreditCard {
unowned let owner: Customer // never optional; owner must outlive card
init(owner: Customer) { self.owner = owner }
deinit { print("CreditCard deinit") }
}
var cust: Customer? = Customer("Lars")
cust!.card = CreditCard(owner: cust!)
cust = nil // deallocates both (no cycle)Tipps und Muster
Tipps:
- Verwenden Sie standardmäßig strong.
- Brechen Sie Zyklen mit weak; Delegates sind häufig weak.
- Verwenden Sie unowned nur bei garantierter Lebensdauer (z. B. Kind → Elternobjekt).
- Klassen sind Referenztypen; Structs und Enums benötigen keine ARC-Regeln.
weak oder unowned?
Kurztest: Wann wählen Sie weak und wann unowned?
Zusammenfassung
Zusammenfassung: ARC gibt Objekte frei, wenn keine strong-Referenzen mehr vorhanden sind. Verhindern Sie Zyklen mit weak (optional) oder unowned (Lebensdauer garantiert). Wählen Sie die kleinstmögliche sichere Besitzart.
Lerne Swift mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 122
- Lektionen
- 409
Häufig gestellte Fragen
Ist die Lektion „Grundlagen von ARC: strong / weak / unowned“ kostenlos?
Ja — der vollständige Text von „Grundlagen von ARC: strong / weak / unowned“ 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 3 Lektionen.
Was lerne ich in „Grundlagen von ARC: strong / weak / unowned“?
Lernen Sie die Referenzzählung von ARC kennen und wann Sie strong , weak und unowned verwenden sollten, um Speicherlecks zu vermeiden. 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 1 von 3.
Wie lange dauert die Lektion „Grundlagen von ARC: strong / weak / unowned“?
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
- Grundlagen von ARC: strong / weak / unowned
- Retain Cycles erkennen und mit weak/unowned aufbrechen
- Werttypen zur Verringerung gemeinsamer Nutzung