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.