Sobes.tech
Middle

Kako možete skladištiti objekte klasa u niz putem jake reference?

sobes.tech АИ

Одговор од АИ

Objekti klase u nizu se podrazumevano čuvaju putem jakih referenci u Swift-u, ako niz sadrži elemente tipa klase. Niz [MyClass] ili Array<MyClass> će sadržavati jake reference na instance MyClass.

Primer:

class MyClass {
    let id: Int
    init(id: Int) {
        self.id = id
        print("MyClass \(id) kreiran")
    }
    deinit {
        print("MyClass \(id) oslobođen")
    }
}

var jakeReferenceNiz: [MyClass] = []

for i in 0..<3 {
    let obj = MyClass(id: i)
    jakeReferenceNiz.append(obj) // Niz čuva jake reference
}

print("Niz ima \(jakeReferenceNiz.count) elemenata")

// Objekti neće biti deallocirani dok postoje jake reference u nizu
// Dodeljivanjem `nil` nizu ili uklanjanjem elemenata doći će do deallocacije,
// ako ne postoje druge jake reference.

// jakeReferenceNiz = [] // Primer oslobađanja svih jakih referenci
// jakeReferenceNiz.remove(at: 0) // Primer oslobađanja jedne jake reference

U Swift-u, nizovi vrednosnih tipova (struct) ili enumeracija (enum) čuvaju kopije svojih elemenata. Međutim, ako niz sadrži instance klasa (class), on čuva jake reference na te instance.