Sobes.tech
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 деп жарыяланган, анткени батир адамды күчтүү шилтемемен кармап туруусу керек эмес, циклдин алдын алуу үчүн, бирок адам батирден узак убакытка чейин бар деп эсептелет.