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.