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.