Назад к вопросам
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), он хранит сильные ссылки на эти экземпляры.