Sobes.tech
Junior — Middle

Millal saab öelda, et objekt või struktuur ei asu mälu virnas?

sobes.tech AI

Vastus AI-lt

Objekt või struktuur ei asu mälu virnas (stack), kui see on dünaamiliselt eraldatud või omab pikka eluea aega, mis ületab funktsiooni täitmise aja.

iOS-is (ja üldiselt Swift/Objective-C-s):

  • Kohalikud muutujad ja struktuurid paiknevad tavaliselt virnas.
  • Klasside objektid (viidatüübid) eraldatakse virnas (heap), ja virnas hoitakse ainult viidet neile.
  • Kui objekt luuakse alloc/init abil Objective-C-s või class abil Swift-s, siis see paikneb virnas.

Näide Swift-s:

func näide() {
    kohalikStruktuur = MyStruct() // virnas
    objekt = MyClass() // virnas, viide virnas
}

Seega, kui muutuja on viide klassi objekti, asub objekt ise väljaspool virna, virnas.