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