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,
unownedreferensiyasiga 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.