Middle
Jak lze ukládat objekty tříd do pole pomocí silného odkazu?
sobes.tech AI
Odpověď od AI
Objekty třídy v poli jsou ve Swiftu ve výchozím nastavení uloženy pomocí silných odkazů, pokud pole obsahuje prvky typu třídy. Pole [MyClass] nebo Array<MyClass> bude obsahovat silné odkazy na instance MyClass.
Příklad:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) vytvořen")
}
deinit {
print("MyClass \(id) uvolněn")
}
}
var silneOdkazyPole: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
silneOdkazyPole.append(obj) // Pole drží silné odkazy
}
print("Pole má \(silneOdkazyPole.count) prvků")
// Objekty nebudou uvolněny, dokud existují silné odkazy v poli
// Při přiřazení `nil` poli nebo odstranění prvků dojde k uvolnění,
// pokud neexistují jiné silné odkazy.
// silneOdkazyPole = [] // Příklad uvolnění všech silných odkazů
// silneOdkazyPole.remove(at: 0) // Příklad uvolnění jednoho silného odkazu
V Swiftu pole hodnot (struct) nebo enum (enum) ukládají kopie svých prvků. Pokud však pole obsahuje instance třídy (class), ukládá silné odkazy na tyto instance.