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 — ар дайым жарактуу болушу керек болгон шилтемелер үчүн.