Middle — Middle+
Эсептелген эсептелген тилдеринде шилтемелерди кармап калуу циклы кандайча башталат?
sobes.tech AI
AIден жооп
Автоматтык эс тутумду башкаруу тилдеринде, мисалы, Swift же Objective-C iOSто, retention cycle (кармоо цикли) пайда болот, эгерде эки же андан көп объект бири-бирин күчтүү шилтемелер аркылуу кармап турушса, бул garbage collector же ARC (Автоматтык шилтемелердин эсептөөчүсү) бул объекттерди бошотууга мүмкүнчүлүк бербейт.
Кармоо цикли башталат, мисалы, объект A объект Bге күчтүү шилтеме камтыйт, жана B өз кезегинде Aга күчтүү шилтеме камтыйт. Бул эки объекттин шилтемелер санагычтары эч качан нөлгө жетпейт дегенди билдирет.
Мындай циклдердин алдын алуу үчүн колдонулат:
- Слаб шилтемелер (
weak) — шилтемелер санагычын көбөйтпөйт жана объект жоголгондо автоматтык түрдө nil кылынат. - Коопсуз шилтемелер (
unowned) — санагычты көбөйтпөйт, бирок автоматтык түрдө nil кылынбайт жана объект узак убакыт бойы бар экенине кепилдик берилсе колдонулат.
Мисал:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // цикли алдын алуу үчүн слаба шилтеме
}
Ошентип, кармоо цикли өз ара күчтүү шилтемелер аркылуу башталат жана слаба же ээ эмес шилтемелер колдонуу менен бузуучу цикл алдын алынат.