Sobes.tech
Junior — Middle

Swiftda referanslarni e'lon qilishda 'unowned' va 'strong' kalit so'zlaridan foydalanish qanday farq qiladi?

sobes.tech AI

AIdan javob

Swift'ta strong va unowned kalit so'zlari, referenslarni boshqarish va ushlab qolish sikllarini (retain cycles) oldini olish uchun ishlatiladi.

  • strong — bu standart kuchli referensiya bo'lib, ob'ektning referenslar hisoblagichini oshiradi. Kamida bitta kuchli referens mavjud bo'lsa, ob'ekt xotiradan o'chirilmaydi.

  • unowned — bu zaif, ammo opsional bo'lmagan referensiya. U referenslar hisoblagichini oshirmaydi, lekin bu referensiyadan foydalanish vaqtida, unga murojaat qilayotgan ob'ekt har doim mavjud deb hisoblaydi. Agar ob'ekt allaqachon o'chirilgan bo'lsa, unowned referensiyasiga kirish ish vaqtida xato keltirib chiqaradi.

Misol:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt

Bu yerda, tenant unowned sifatida e'lon qilingan, chunki kvartira odamni kuchli referens bilan ushlab turmasligi kerak, siklni oldini olish uchun, lekin odamning kvartiradan uzoqroq mavjud bo'lishi taxmin qilinadi.