Sobes.tech
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.