Sobes.tech
Middle

Wie hängt die Initialisierung von Klassen mit der Speicherzuweisung zusammen?

sobes.tech KI

Antwort von AI

Bei der Initialisierung eines Klassenobjekts wird Speicher für seine Speicherung reserviert. Dieser Prozess umfasst die folgenden Schritte:

  1. Größenberechnung: Das System ermittelt den Speicherbedarf für alle Eigenschaften der Instanz der Klasse und die Metadaten (z.B. einen Zeiger auf die Tabelle der virtuellen Methoden).
  2. Speicheranfrage: Das System sendet eine Anfrage, um den erforderlichen Speicher im Heap zu reservieren.
  3. Speicherzuweisung: Wenn genügend freier Speicher vorhanden ist, weist der Heap einen Speicherblock zu und gibt einen Zeiger darauf zurück.
  4. Aufruf des Initialisierers (init): Nach Erhalt des Zeigers auf den reservierten Speicher ruft das System den entsprechenden Initialisierer der Klasse (init) auf, um den Anfangszustand der Eigenschaften der Instanz zu konfigurieren. Während der Initialisierung können zusätzliche Ressourcen zugewiesen oder andere Objekte erstellt werden.
  5. Rückgabe der Instanz: Der Initialisierer beendet seine Arbeit, und das System gibt eine Referenz auf die erstellte und initialisierte Instanz der Klasse zurück.

Der reservierte Speicher bleibt belegt, bis das Objekt vom Speicherverwaltungssystem freigegeben wird (Automatic Reference Counting - ARC in iOS).

Beispiel:

class MyClass {  
    var number: Int  
    var text: String  

    init(number: Int, text: String) {  
        // Zu diesem Zeitpunkt ist der Speicher für die Instanz bereits reserviert.  
        self.number = number // Zuweisung an die Eigenschaft  
        self.text = text     // Zuweisung an die Eigenschaft  
        // Der Initialisierer endet, das Objekt ist einsatzbereit.  
    }  
}  

// Erstellen einer Instanz von MyClass.  
// Dabei erfolgt die Speicherreservierung und der Aufruf von init().  
let myObject = MyClass(number: 42, text: "Hello")