Middle
Как да съхраняваме обекти на класове в масив чрез силна препратка?
sobes.tech AI
Отговор от AI
Обекти от клас в масив се съхраняват по подразбиране в Swift чрез силни препратки, ако масивът съдържа елементи от тип клас. Масивът [MyClass] или Array<MyClass> ще съдържа силни препратки към инстанциите на MyClass.
Пример:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) създаден")
}
deinit {
print("MyClass \(id) освободен")
}
}
var силниПрепраткиМасив: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
силниПрепраткиМасив.append(obj) // Масивът държи силни препратки
}
print("Масивът има \(силниПрепраткиМасив.count) елемента")
// Обектите няма да бъдат деалокирани, докато съществуват силни препратки в масива
// Присвояване `nil` на масива или премахване на елементи ще доведе до деалокиране,
// ако няма други силни препратки.
// силниПрепраткиМасив = [] // Пример за освобождаване на всички силни препратки
// силниПрепраткиМасив.remove(at: 0) // Пример за освобождаване на една силна препратка
В Swift масивите от стойностни типове (struct) или енумерации (enum) съхраняват копия на своите елементи. Въпреки това, ако масивът съдържа инстанции на класове (class), той съхранява силни препратки към тези инстанции.