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 бири-бирине шилтеме жасашат, бирок бири алсыз, бул эс тутумдун агып кетишин алдын алат.
Эгер шилтемелер цикли үзүлбөсө, объекттер сырткы шилтемелер жок болсо да, эс тутумда калат, бул эс тутумдун агып кетишине алып келет.