Sobes.tech
Junior — Middle

Was ist ein Speicherverlust und wie kann er in einer Anwendung auftreten?

sobes.tech KI

Antwort von AI

Memory Leak in einer iOS-Anwendung ist eine Situation, in der die Anwendung weiterhin Referenzen auf Objekte hält, die nicht mehr benötigt werden. Dadurch wird der Speicher nicht freigegeben und im Laufe der Zeit werden mehr Ressourcen verbraucht.

Ursachen:

  • Zyklische Referenzen (retain cycles) zwischen Objekten, insbesondere bei Verwendung von ARC (Automatische Referenzzählung).
  • Verwendung von Closures mit Capture von self ohne schwache Referenzen (weak/self).
  • Falsches Ressourcenmanagement, z.B. Nichtfreigabe von Delegierten.

Beispiel für einen retain cycle mit einem Closure:

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

    func setup() {
        closure = {
            print(self) // Capture von self ohne weak
        }
    }
}

Um dies zu vermeiden, sollte [weak self] verwendet werden:

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

Regelmäßige Analysen mit den Xcode-Tools (Instruments — Leaks) helfen, Speicherlecks zu erkennen und zu beheben.