Sobes.tech
Junior

Swift'da weak xotira modifikatori nima?

sobes.tech AI

AIdan javob

weak o'zgaruvchisi obyektlar o'rtasidagi kuchli referenslar tsiklini buzish uchun ishlatiladi, bir obyekt boshqa obyektga kuchli referensga ega bo'lsa va bu obyekt o'z navbatida qaytib kuchli referensga ega bo'lsa.

weak ning asosiy xususiyatlari:

  • Referenslar hisoblagichini oshirmaydi: weak foydalanish obyektga kuchli referenslar sonini oshirmaydi.
  • nil bo'lishi mumkin: Zaif referens (Optional) bo'lib, u avtomatik ravishda nil ga aylantiriladi, obyekt deinitializatsiya qilinayotganda.
  • Ota/bolalar uchun ishlatiladi: Ko'pincha, bolalar obyektining otaiga bo'lgan referensi kuchli referenslar tsiklini oldini olish uchun ishlatiladi.
  • var sifatida e'lon qilinishi kerak: Zaif referens nil bo'lishi mumkinligi uchun, u o'zgaruvchi (var) bo'lishi kerak, let emas.

Foydalanish misoli:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) boshlanmoqda")
    }

    deinit {
        print("\(name) tugatilmoqda")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Zaif referens

    init(unit: String) {
        self.unit = unit
        print("Xonadon \(unit) boshlanmoqda")
    }

    deinit {
        print("Xonadon \(unit) tugatilmoqda")
    }
}

Apartment sinfida weak var tenant: Person? bo'lmasdan, kuchli referenslar tsikli yuzaga keladi va Person va Apartment instansiyalari, agar ularga boshqa kuchli referenslar qolmasa, deinitializatsiya qilinmaydi. weak yordamida, Person instansiyasi deinitializatsiya qilinayotganda, Apartment ichidagi tenant referensi avtomatik ravishda nil bo'ladi.