Sobes.tech
Junior — Middle

Башкарылуучу чөйрөлөрдө циклик шилтемелер менен объекттердин эсебин бошотуу кандай болот?

sobes.tech AI

AIден жооп

Баскарылуучу чөйрөлөрдө, мисалы, iOS менен ARC (Автоматтык шилтеме эсептөө), циклик шилтемелерге ээ объекттер үчүн эс тутумду бошотуу автоматтык түрдө болбойт, анткени ARC шилтемелер циклин үзө албайт.

Бул маселени чечүү үчүн, алсыз (weak) жана ээлик кылбаган (unowned) шилтемелер колдонулат, алар объекттин шилтемелер санын көбөйтпөйт. Бул циклдерди үзүүгө жана эс тутумду туура бошотууга мүмкүндүк берет.

Мисал:

class Person {
    var name: String
    weak var apartment: Apartment? // алсыз шилтеме

    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // ээлик кылбаган шилтеме

    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Бул жерде, Person жана Apartment бири-бирине шилтеме жасашат, бирок бири алсыз, бул эс тутумдун агып кетишин алдын алат.

Эгер шилтемелер цикли үзүлбөсө, объекттер сырткы шилтемелер жок болсо да, эс тутумда калат, бул эс тутумдун агып кетишине алып келет.