Junior — Middle
Wat veroorzaakt geheugenlekken in applicaties?
sobes.tech AI
Antwoord van AI
Memorylek in applicaties ontstaan wanneer geheugen dat is toegewezen aan objecten of gegevens niet wordt vrijgegeven nadat ze niet meer nodig zijn. In iOS wordt dit vaak geassocieerd met:
- Cycli van referenties tussen objecten (retourcycli), vooral bij gebruik van ARC (Automatisch Referentie Telling). Bijvoorbeeld, wanneer twee objecten elkaar met sterke referenties verwijzen, worden ze niet vrijgegeven.
- Onjuist gebruik van closures, die self vastleggen met een sterke referentie.
- Het niet vrijgeven van bronnen zoals timers, observers of bestandsdescriptors.
Voorbeeld van een retain cycle met een closure:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // self wordt sterk vastgelegd, waardoor een cyclus ontstaat
}
}
}
Om leaks te voorkomen, worden zwakke (weak) of niet-eigen referenties (unowned) gebruikt in closures en wordt het juiste beheer van de levenscyclus van objecten gewaarborgd.