Sobes.tech
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), той съхранява силни препратки към тези инстанции.