Sobes.tech
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.