Middle
Kuidas saab klasside objekte massiivis hoida tugeva viitega?
sobes.tech AI
Vastus AI-lt
Klassiobjektid massiivis salvestatakse vaikimisi Swiftis tugevate viidetena, kui massiiv sisaldab klassitüüpi elemente. Massiiv [MyClass] või Array<MyClass> sisaldab tugevaid viiteid MyClass eksemplaridele.
Näide:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) loodud")
}
deinit {
print("MyClass \(id) vabastatud")
}
}
var tugevadViitedMassiiv: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
tugevadViitedMassiiv.append(obj) // Massiiv hoiab tugevaid viiteid
}
print("Massiiv sisaldab \(tugevadViitedMassiiv.count) elementi")
// Objekte ei vabastata, kuni massiivis on tugevad viited
// Kui massiivile määratakse `nil` või eemaldatakse elemendid, toimub vabastamine,
// kui teisi tugevaid viiteid pole.
// tugevadViitedMassiiv = [] // Näide kõigi tugevate viidete vabastamisest
// tugevadViitedMassiiv.remove(at: 0) // Näide ühe tugeva viite vabastamisest
Swiftis salvestavad väärtustüübid (struct) või enumid (enum) oma elementide koopiad. Kui aga massiiv sisaldab klassi eksemplare (class), salvestab see tugevaid viiteid nendele eksemplaridele.