Sobes.tech
Middle

Hogyan kapcsolódik az osztályok inicializálása a memóriafoglaláshoz?

sobes.tech MI

Válasz az MI-től

Osztályobjektum inicializálásakor memória kerül lefoglalásra a tárolásához. Ez a folyamat a következő lépéseket tartalmazza:

  1. Méret számítása: A rendszer meghatározza az összes tulajdonság és metaadat (például egy mutató a virtuális metódusok táblájára) tárolásához szükséges memória mennyiségét.
  2. Memória igénylése: A rendszer kérést küld a szükséges méretű memória lefoglalására a heap-en.
  3. Memória foglalás: Ha elegendő szabad hely van, a heap lefoglal egy memória blokkot és visszaad egy mutatót rá.
  4. Az inicializáló (init) hívása: Miután megkapta a mutatót a lefoglalt memóriára, a rendszer meghívja a megfelelő osztály (init) inicializálóját, hogy beállítsa az példány kezdeti állapotát. Az inicializálás során további erőforrások foglalhatók vagy más objektumok hozhatók létre.
  5. Példány visszaadása: Az inicializáló befejezi a munkát, és a rendszer visszaad egy hivatkozást a létrehozott és inicializált osztálypéldányra.

A lefoglalt memória addig marad foglalt, amíg az objektumot a memória kezelő rendszer (Memory Management System) nem szabadítja fel (Automatic Reference Counting - ARC iOS-en).

Példa:

class MyClass {  
    var number: Int  
    var text: String  

    init(number: Int, text: String) {  
        // Ebben a pontban a memória már lefoglalásra került.  
        self.number = number // Tulajdonság értékadása  
        self.text = text     // Tulajdonság értékadása  
        // Az inicializáló befejeződik, az objektum használatra kész.  
    }  
}  

// Példány létrehozása MyClass-ból.  
// Ez magában foglalja a memória lefoglalását és az init() hívását.  
let myObject = MyClass(number: 42, text: "Hello")