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.