Junior
Wat is de weak geheugenmodifier in Swift?
sobes.tech AI
Antwoord van AI
De weak-modifier wordt gebruikt om sterke referentiecirkels tussen objecten te doorbreken, wanneer één object een sterke referentie heeft naar een ander, en dat object op zijn beurt een sterke referentie terug heeft.
Belangrijkste kenmerken van weak:
- Verhoogt de referentieteller niet: Het gebruik van
weakverhoogt niet het aantal sterke referenties naar het object. - Kan
nilzijn: De zwakke referentie is optioneel (Optional) en wordt automatischnilwanneer het object waarnaar wordt verwezen wordt gedeïnitialiseerd. - Wordt gebruikt voor ouder/kind relaties: Vaak toegepast wanneer een kindobject een referentie naar zijn ouder heeft om cycli van sterke referenties te voorkomen.
- Moet worden gedeclareerd als
var: Omdat de zwakke referentienilkan worden, moet het een variabele (var) zijn, geen constante (let).
Voorbeeld van gebruik:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("\(name) wordt geïnitialiseerd")
}
deinit {
print("\(name) wordt gedeïnitialiseerd")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Zwakke referentie
init(unit: String) {
self.unit = unit
print("Appartement \(unit) wordt geïnitialiseerd")
}
deinit {
print("Appartement \(unit) wordt gedeïnitialiseerd")
}
}
Zonder weak var tenant: Person? in de klasse Apartment, zou er een cyclus van sterke referenties ontstaan, en zouden de instanties Person en Apartment niet gedeïnitialiseerd worden wanneer er geen andere sterke referenties meer naar hen verwijzen. Dankzij weak wordt de referentie tenant in de instantie Apartment automatisch nil wanneer de instantie Person wordt gedeïnitialiseerd.