Sobes.tech
Middle

Wie werden Ansichten, die eine Referenzart sind, gespeichert?

sobes.tech KI

Antwort von AI

Views (UIView und seine Unterklassen) in iOS sind Klassen, also Referenztypen. Die Speicherung von Referenzen auf sie erfolgt durch die folgenden Mechanismen:

  1. Starke Referenzen (Strong References):

    • Standardmäßig, wenn Sie eine Eigenschaft für UIView ohne den Spezifizierer weak oder unowned deklarieren, wird eine starke Referenz erstellt.
    • Eine starke Referenz erhöht den Referenzzähler des Objekts. Das Objekt wird nicht aus dem Speicher entfernt, solange mindestens eine starke Referenz darauf besteht.
    • Dies ist die Standardmethode zur Speicherung von Views, wenn sie im Speicher verbleiben und zugänglich sein sollen.
    //Starke Referenz
    var myView: UIView = UIView()
    
  2. Schwache Referenzen (Weak References):

    • Werden mit dem Schlüsselwort weak deklariert.
    • Eine schwache Referenz erhöht nicht den Referenzzähler des Objekts.
    • Schwache Referenzen verhindern nicht die Entfernung des Objekts aus dem Speicher, wenn keine starken Referenzen mehr vorhanden sind.
    • Werden verwendet, um Zyklen starker Referenzen zu vermeiden, eine typische Situation ist die Eltern-Kind-Beziehung, bei der der Elternteil eine starke Referenz auf das Kind hat, und das Kind manchmal eine Referenz auf den Elternteil. In diesem Fall sollte die inverse Referenz auf den Elternteil schwach sein.
    • Schwache Referenzen müssen optional sein (Optional), da das Objekt gelöscht werden kann und die Referenz nil wird.
    weak var parentView: UIView?
    
  3. Unowned Referenzen:

    • Werden mit dem Schlüsselwort unowned deklariert.
    • Wie schwache Referenzen, erhöhen sie nicht den Referenzzähler.
    • Unterschied: Im Gegensatz zu schwachen Referenzen sind unbesitzende Referenzen nicht optional. Sie setzen voraus, dass das Objekt mindestens so lange lebt wie die Referenz. Der Zugriff auf das Objekt nach dessen Freigabe führt zu einem Absturz.
    • Werden verwendet, wenn man sicher ist, dass der Lebenszyklus der Referenz den des Zielobjekts nicht übersteigt. Im Kontext von Views ist dies weniger üblich als weak.
    //Weniger typisch für Views, aber möglich
    unowned var childView: UIView
    
  4. Arrays und Sammlungen:

    • Das Speichern von Referenzen auf Views in Arrays (Array), Dictionaries (Dictionary) oder Mengen (Set) erzeugt ebenfalls standardmäßig starke Referenzen auf die Elemente der Sammlung.
    var subviews: [UIView] = []
    

Die Wahl zwischen starker, schwacher oder unbesitzender Referenz hängt vom konkreten Nutzungsszenario und der Verwaltung des Lebenszyklus der Objekte ab, um Speicherlecks zu vermeiden. In SwiftUI sind die Konzepte der Lebenszyklusverwaltung von Views anders, aber im UIKit bleiben diese Mechanismen die Hauptmethode zur Speicherung von Referenzen.