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:
-
Starke Referenzen (Strong References):
- Standardmäßig, wenn Sie eine Eigenschaft für UIView ohne den Spezifizierer
weakoderunowneddeklarieren, 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() - Standardmäßig, wenn Sie eine Eigenschaft für UIView ohne den Spezifizierer
-
Schwache Referenzen (Weak References):
- Werden mit dem Schlüsselwort
weakdeklariert. - 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 Referenznilwird.
weak var parentView: UIView? - Werden mit dem Schlüsselwort
-
Unowned Referenzen:
- Werden mit dem Schlüsselwort
unowneddeklariert. - 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 - Werden mit dem Schlüsselwort
-
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] = [] - Das Speichern von Referenzen auf Views in Arrays (
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.