Sobes.tech
Junior — Middle

Эске тутуу цикли деген эмне жана ал колдонмолордун ишине кандай таасир этет, түшүндүрүңүз.

sobes.tech AI

AIден жооп

Туруу цикли (retain cycle) — бул эс, анда экинчи же андан көп объекттер бири-бирине күчтүү шилтемелер (strong references) аркылуу кайрылышат, натыйжада ARC (Automatic Reference Counting) системасы аларды бошотууга мүмкүнчүлүк албайт. Натыйжада, эс тутуму агып кетет, анткени объекттер керексиз болсо да эс тутумда калат.

Мисалы, эгер A объектиси B объектиси менен күчтүү шилтемеге ээ болсо жана B — Aга шилтеме жасаса, ARC алардын бирин да бошотпойт, сырттан шилтемелер болбосо да.

Туруу циклинин алдын алуу үчүн, адатта, weak же unowned шилтемелер колдонулат, циклди үзүү үчүн. Мисалы, делегаттар көбүнчө weak деп жарыяланат.

Swiftте мисал:

class Person {
    var apartment: Apartment?
}

class Apartment {
    weak var tenant: Person? // циклди алдын алуу үчүн weak шилтеме
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person

Эгер tenant күчтүү шилтеме болсо, объекттер бошотулбайт, цикл пайда болот.

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