Sobes.tech
Middle

Klass ob'ektlarini kuchli havola bilan massivga qanday saqlash mumkin?

sobes.tech AI

AIdan javob

Klass ob'ektlari massivda kuchli referenslar bilan saqlanadi, agar massiv klass turidagi elementlarni o'z ichiga olsa. [MyClass] yoki Array<MyClass> massivlari MyClass ning instansiyalariga kuchli referenslarni saqlaydi.

Misol:

class MyClass {
    let id: Int
    init(id: Int) {
        self.id = id
        print("MyClass \(id) yaratildi")
    }
    deinit {
        print("MyClass \(id) bo'shatildi")
    }
}

var kuchliReferenslarMassivi: [MyClass] = []

for i in 0..<3 {
    let obj = MyClass(id: i)
    kuchliReferenslarMassivi.append(obj) // Massiv kuchli referenslarni saqlaydi
}

print("Massivda \(kuchliReferenslarMassivi.count) ta element bor")

// Ob'ektlar massivda kuchli referenslar mavjud bo'lsa, deallocatsiya qilinmaydi
// massivga `nil` berish yoki elementlarni o'chirish, agar boshqa kuchli referenslar bo'lmasa, deallocatsiyaga olib keladi.

// kuchliReferenslarMassivi = [] // Barcha kuchli referenslarni bo'shatish misoli
// kuchliReferenslarMassivi.remove(at: 0) // Bir kuchli referensni bo'shatish misoli

Swiftda, qiymat turlaridan (struct) yoki enumlardan (enum) tashkil topgan massivlar o'z elementlarining nusxalarini saqlaydi. Ammo, agar massiv klass instansiyalarini (class) o'z ichiga olsa, ular kuchli referenslarni saqlaydi.