Middle
Hogyan lehet osztályobjektumokat erős hivatkozással tárolni egy tömbben?
sobes.tech MI
Válasz az MI-től
Osztályobjektumok tömbben alapértelmezés szerint erős hivatkozásokkal vannak tárolva Swiftben, ha a tömb osztálytípusú elemeket tartalmaz. Egy [MyClass] vagy Array<MyClass> tömb erős hivatkozásokat tartalmaz a MyClass példányaira.
Példa:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) létrehozva")
}
deinit {
print("MyClass \(id) felszabadítva")
}
}
var erősHivatkozásokTömbje: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
erősHivatkozásokTömbje.append(obj) // A tömb erős hivatkozásokat tart fenn
}
print("A tömb \(erősHivatkozásokTömbje.count) elemet tartalmaz")
// Az objektumok nem lesznek felszabadítva, amíg erős hivatkozások vannak a tömbben
// Az array-nek `nil`-t adva vagy elemeket törölve felszabadulnak,
// ha nincs más erős hivatkozás.
// erősHivatkozásokTömbje = [] // Példa az összes erős hivatkozás felszabadítására
// erősHivatkozásokTömbje.remove(at: 0) // Példa egy erős hivatkozás felszabadítására
Swiftben a értéktípusú (struct) vagy enumerációs (enum) tömbök másolatokat tárolnak az elemeikről. Azonban, ha a tömb osztálypéldányokat (class) tartalmaz, erős hivatkozásokat tárol ezekre az példányokra.