Middle
Kā var glabāt klases objektus masīvā ar stipru atsauci?
sobes.tech AI
Atbilde no AI
Klases objekti masīvā pēc noklusējuma tiek glabāti ar stiprām atsaucēm Swift, ja masīvs satur klases tipa elementus. Masīvs [MyClass] vai Array<MyClass> saturēs stipras atsauces uz MyClass instancēm.
Piemērs:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) izveidots")
}
deinit {
print("MyClass \(id) atbrīvots")
}
}
var stiprasAtsaucesMasivs: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
stiprasAtsaucesMasivs.append(obj) // Masīvs glabā stipras atsauces
}
print("Masīvā ir \(stiprasAtsaucesMasivs.count) elementi")
// Objekti netiks atbrīvoti, kamēr pastāv stipras atsauces uz tiem masīvā
// Piešķirot `nil` masīvam vai noņemot elementus, notiks atbrīvošana,
// ja nav citu stipru atsauču.
// stiprasAtsaucesMasivs = [] // Piemērs, kā atbrīvot visas stipras atsauces
// stiprasAtsaucesMasivs.remove(at: 0) // Piemērs, kā atbrīvot vienu stipru atsauci
Swiftā, vērtību tipu (struct) vai enum tipu (enum) masīvi glabā to elementu kopijas. Tomēr, ja masīvs satur klases instancēs (class), tas glabā stipras atsauces uz šīm instancēm.