Middle
Kaip galima saugoti klasių objektus masyve stiprios nuorodos pagalba?
sobes.tech AI
Atsakymas iš AI
Klasės objektai masyve pagal numatytuosius nustatymus saugomi stipriomis nuorodomis Swift, jei masyvas turi klasės tipo elementų. Masyvas [MyClass] arba Array<MyClass> turės stiprias nuorodas į MyClass egzempliorius.
Pavyzdys:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) sukurtas")
}
deinit {
print("MyClass \(id) atlaisvintas")
}
}
var stipriosNuorodosMasyvas: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
stipriosNuorodosMasyvas.append(obj) // Masyvas saugo stiprias nuorodas
}
print("Masyvas turi \(stipriosNuorodosMasyvas.count) elementus")
// Objektai nebus atlaisvinti, kol egzistuoja stiprios nuorodos į juos masyve
// Priskyrus `nil` masyvui arba pašalinus elementus, įvyksta atlaisvinimas,
// jei nėra kitų stiprių nuorodų.
// stipriosNuorodosMasyvas = [] // Pavyzdys, kaip atlaisvinti visas stiprias nuorodas
// stipriosNuorodosMasyvas.remove(at: 0) // Pavyzdys, kaip atlaisvinti vieną stiprią nuorodą
Swift'e, vertės tipų (struct) arba išvardijimų (enum) masyvai saugo savo elementų kopijas. Tačiau, jei masyvas turi klasių (class) pavyzdžių, jis saugo stiprias nuorodas į šiuos pavyzdžius.