Sobes.tech
Middle

Jak przechowywać obiekty klas w tablicy za pomocą silnego odwołania?

sobes.tech AI

Odpowiedź od AI

Obiekty klasy w tablicy są domyślnie przechowywane w Swift jako silne referencje, jeśli tablica zawiera elementy typu klasy. Tablica [MyClass] lub Array<MyClass> będzie zawierać silne referencje do instancji MyClass.

Przykład:

class MyClass {
    let id: Int
    init(id: Int) {
        self.id = id
        print("MyClass \(id) utworzony")
    }
    deinit {
        print("MyClass \(id) zwolniony")
    }
}

var tablicaSilnychReferencji: [MyClass] = []

for i in 0..<3 {
    let obj = MyClass(id: i)
    tablicaSilnychReferencji.append(obj) // Tablica przechowuje silne referencje
}

print("Tablica ma \(tablicaSilnychReferencji.count) elementów")

// Obiekty nie zostaną zwolnione, dopóki istnieją silne referencje w tablicy
// Przypisanie `nil` do tablicy lub usunięcie elementów spowoduje zwolnienie,
// jeśli nie ma innych silnych referencji.

// tablicaSilnychReferencji = [] // Przykład zwolnienia wszystkich silnych referencji
// tablicaSilnychReferencji.remove(at: 0) // Przykład zwolnienia jednej silnej referencji

W Swift, tablice wartości (struct) lub tablice wyliczeń (enum) przechowują kopie swoich elementów. Jednak, jeśli tablica zawiera instancje klasy (class), przechowuje silne referencje do tych instancji.