Sobes.tech
Junior — Middle

Hol lesz elhelyezve a szerkezet, ha benne van egy mező, amely egy osztály példánya?

sobes.tech MI

Válasz az MI-től

iOS-ben, ha egy struktúra (struct) tartalmaz egy osztály (class) példányát, akkor maga a struktúra a veremben (stack) helyezkedik el, míg az osztály mezője a halomban (heap).

Ez azért van, mert a struktúrák érték típusok, amelyek közvetlenül ott tárolódnak, ahol deklarálva vannak (általában a veremben), míg az osztályok referencia típusok, amelyek objektumai a halomban helyezkednek el, és a struktúrában csak egy referencia van ezekhez az objektumokhoz.

Példa:

class MyClass {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

struct MyStruct {
    var obj: MyClass
}

var s = MyStruct(obj: MyClass(value: 10))

Itt az s egy struktúra, amely a veremben van, az MyClass(value: 10) objektum pedig a halomban, és az s.obj csak egy referencia erre az objektumra.