Middle
Ako môžete ukladať objekty tried do poľa pomocou silného odkazu?
sobes.tech AI
Odpoveď od AI
Objekty triedy v poli sa štandardným nastavením sa v Swiftu ukladajú pomocou silných odkazov, ak pole obsahuje prvky typu trieda. Pole [MyClass] alebo Array<MyClass> bude obsahovať silné odkazy na inštancie MyClass.
Príklad:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) vytvorený")
}
deinit {
print("MyClass \(id) uvoľnený")
}
}
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) prvkov")
// Objektov nebudú deallocované, pokiaľ v poli existujú silné odkazy
// Priradením `nil` poľa alebo odstránením prvkov dôjde k uvoľneniu,
// ak neexistujú iné silné odkazy.
// silneOdkazyPole = [] // Príklad uvoľnenia všetkých silných odkazov
// silneOdkazyPole.remove(at: 0) // Príklad uvoľnenia jedného silného odkazu
V Swiftu, polia hodnôt (struct) alebo enum (enum) ukladajú kópie svojich prvkov. Ak však pole obsahuje inštancie tried (class), ukladajú silné odkazy na tieto inštancie.