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