Sobes.tech
Middle

Cum se pot stoca obiecte de clase într-un array printr-o referință puternică?

sobes.tech AI

Răspuns de la AI

Obiectele de clasă dintr-un array sunt stocate implicit în Swift prin referințe puternice, dacă array-ul conține elemente de tip clasă. Un array [MyClass] sau Array<MyClass> va conține referințe puternice către instanțele MyClass.

Exemplu:

class MyClass {
    let id: Int
    init(id: Int) {
        self.id = id
        print("MyClass \(id) creat")
    }
    deinit {
        print("MyClass \(id) eliberat")
    }
}

var arrayReferintePuternice: [MyClass] = []

for i in 0..<3 {
    let obj = MyClass(id: i)
    arrayReferintePuternice.append(obj) // Array-ul păstrează referințe puternice
}

print("Array-ul are \(arrayReferintePuternice.count) elemente")

// Obiectele nu vor fi dezintegrate atâta timp cât există referințe puternice în array
// Atribuirea `nil` array-ului sau eliminarea elementelor va duce la dezintegrate,
// dacă nu există alte referințe puternice.

// arrayReferintePuternice = [] // Exemplu de eliberare a tuturor referințelor puternice
// arrayReferintePuternice.remove(at: 0) // Exemplu de eliberare a unei referințe puternice

În Swift, array-urile de valori (struct) sau de enumerări (enum) stochează copii ale elementelor lor. Cu toate acestea, dacă array-ul conține instanțe de clase (class), stochează referințe puternice către aceste instanțe.