Sobes.tech
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-ке жадыны дұрыс босатуға мүмкіндік береді.