Sobes.tech
Junior — Middle

Эстеликти Weak жана Unowned түрлөрү эс тутумду башкарууда эмнеге айырмаланат?

sobes.tech AI

AIден жооп

Swiftте weak жана unowned түрүндөгү шилтемелер эс тутумду башкарууда күчтүү шилтемелер циклин (retain cycles) алдын алуу үчүн колдонулат, бирок алардын жүрүм-туруму жана колдонулушу боюнча айырмаланат.

  • Weak (слаб шилтеме):

    • nil болушу мүмкүн.
    • Опционалдуу түрдө жарыяланат (var delegate: SomeDelegate? weak).
    • Объекттин өмүрү бою nil болушу мүмкүн шилтемелер үчүн колдонулат, мисалы, делегаттар.
    • Система автоматтык түрдө weak шилтемени nil кылат, объект бошотулганда.
  • Unowned (менчиксиз):

    • nil болбойт (опционалдуу эмес түр).
    • Объекттин өмүрү бою ишенимдүү бар экенине кепилдик берилген, мисалы, ата-эне жана баланын ортосунда.
    • Эгер unowned шилтемеленген объект алгачкыда бошотулуп калса, ага кирүү катага алып келет (crash).

Мисал:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

// Бул жерде, tenant unowned, анткени батир башкачача жашоочусуз болбойт.

class DelegateHolder {
    weak var delegate: SomeDelegate?
}

// Делегат weak, анткени ал эрте бошотулушу мүмкүн.

Ошентип, weak шилтемелер nil болушу мүмкүн болгон учурлар үчүн ылайыктуу, ал эми unowned — ар дайым жарактуу болушу керек болгон шилтемелер үчүн.