Junior — Middle
Swiftте шилтемелерди жарыялоо учүн 'unowned' жана 'strong' ачкыч сөздөрүнүн колдонулушунун айырмасы эмнеде?
sobes.tech AI
AIден жооп
Swift-те strong жана unowned ачкыч сөздөрү шилтемелерди башкаруу жана кармоо циклинин (retain cycles) алдын алуу үчүн колдонулат.
-
strong — бул стандарттык күчтүү шилтеме, ал объекттин шилтемелер санын көбөйтөт. Кеминде бир күчтүү шилтеме болсо, объект жадыдан өчүрүлбөйт.
-
unowned — бул алсыз, бирок опционал эмес шилтеме. Ал шилтемелер санын көбөйтпөйт, бирок бул шилтемени колдонуу учурунда шилтемеленген объект дайыма бар деп эсептейт. Эгер объект алгачкыдан өчүрүлсө,
unownedшилтемеге кирүү иштөө учурунда катаны алып келет.
Мисал:
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
Бул жерде, tenant unowned деп жарыяланган, анткени батир адамды күчтүү шилтемемен кармап туруусу керек эмес, циклдин алдын алуу үчүн, бирок адам батирден узак убакытка чейин бар деп эсептелет.