Sobes.tech
Junior — Middle

Wat is een verlies van toegewezen geheugen en hoe kan het optreden in een applicatie?

sobes.tech AI

Antwoord van AI

Memorylek in een iOS-applicatie is een situatie waarin de applicatie blijft verwijzen naar objecten die niet meer nodig zijn, waardoor het geheugen niet wordt vrijgegeven en na verloop van tijd meer bronnen worden verbruikt.

Oorzaken:

  • Cyclische verwijzingen (retain cycles) tussen objecten, vooral bij gebruik van ARC (Automatische Referentietelling).
  • Gebruik van closures met capturing van self zonder zwakke verwijzingen (weak/self).
  • Onjuist resourcebeheer, bijvoorbeeld het niet vrijmaken van delegates.

Voorbeeld van een retain cycle met een closure:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // capturing van self zonder weak
        }
    }
}

Om dit te voorkomen, moet [weak self] worden gebruikt:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

Regelmatige analyse met Xcode-tools (Instruments — Leaks) helpt bij het identificeren en elimineren van geheugenlekken.