Junior — Middle
Жады басқаруда циклдік сілтемені қалай жоюға болады?
sobes.tech AI
AI-дан жауап
Циклдік сілтемелер екі немесе одан да көп объектілер бір-біріне сілтеме жасағанда пайда болады, бұл сілтеме есептегіш жүйесі жадыны босатуға кедергі келтіреді, себебі сілтеме есептегіш нөлге тең болмайды. iOS-та циклдік сілтемелерді болдырмау үшін әлсіз (weak) және меншіктемейтін (unowned) сілтемелер пайдаланылады.
- weak — сілтеме, ол сілтеме есептегішін арттырмайды және объект жойылған кезде автоматты түрде нөлге теңестіріледі.
- unowned — сілтеме, ол есептегішті арттырмайды, бірақ нөлге теңестірілмейді, егер объект ұзақ уақыт өмір сүретініне сенімді болса, пайдаланылады.
Мысал:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // циклді болдырмау үшін әлсіз сілтеме
}
let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person
Осылайша, әлсіз сілтемелер циклді үзіп, ARC-ке жадыны дұрыс босатуға мүмкіндік береді.