Sobes.tech
Middle

Ինչպե՞ս կարելի է պահել դասի օբյեկտները զանգվածում ուժեղ հղումով։

sobes.tech AI

Պատասխան AI-ից

Կլասի օբյեկտները զանգվածում պահվում են ուժեղ հղումներով՝ ըստ նախնական կարգավորման, եթե զանգվածը պարունակում է դասի տիպի տարրեր: [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-ների (enum) զանգվածները պահում են իրենց տարրերի պատճենները: Սակայն, եթե զանգվածը պարունակում է դասի օրինակներ (class), այն պահում է այդ օրինակների ուժեղ հղումները: