Sobes.tech
Middle

Kā var glabāt klases objektus masīvā ar stipru atsauci?

sobes.tech AI

Atbilde no AI

Klases objekti masīvā pēc noklusējuma tiek glabāti ar stiprām atsaucēm Swift, ja masīvs satur klases tipa elementus. Masīvs [MyClass] vai Array<MyClass> saturēs stipras atsauces uz MyClass instancēm.

Piemērs:

class MyClass {
    let id: Int
    init(id: Int) {
        self.id = id
        print("MyClass \(id) izveidots")
    }
    deinit {
        print("MyClass \(id) atbrīvots")
    }
}

var stiprasAtsaucesMasivs: [MyClass] = []

for i in 0..<3 {
    let obj = MyClass(id: i)
    stiprasAtsaucesMasivs.append(obj) // Masīvs glabā stipras atsauces
}

print("Masīvā ir \(stiprasAtsaucesMasivs.count) elementi")

// Objekti netiks atbrīvoti, kamēr pastāv stipras atsauces uz tiem masīvā
// Piešķirot `nil` masīvam vai noņemot elementus, notiks atbrīvošana,
// ja nav citu stipru atsauču.

// stiprasAtsaucesMasivs = [] // Piemērs, kā atbrīvot visas stipras atsauces
// stiprasAtsaucesMasivs.remove(at: 0) // Piemērs, kā atbrīvot vienu stipru atsauci

Swiftā, vērtību tipu (struct) vai enum tipu (enum) masīvi glabā to elementu kopijas. Tomēr, ja masīvs satur klases instancēs (class), tas glabā stipras atsauces uz šīm instancēm.