Junior — Middle
Бир нерсе ичинде күчтүү шилтеме эс тутум агып кетишине алып келеби?
sobes.tech AI
AIден жооп
Ооба, iOSтогу объекттердин ортосундагы күчтүү шилтемелердин болушу эс тутум агып кетүүсүнө алып келиши мүмкүн, айрыкча циклдик шилтеме (retain cycle) пайда болсо. Бул, эки объект бири-бирин күчтүү шилтемелер менен кармап турганда болот, жана ARC системасы аларды бошотуп бере албайт, анткени экөөнүн шилтеме санагычтары нөлгө жетпейт.
Мындай агып кетүүнү алдын алуу үчүн, алсыз (weak) же ээси жок (unowned) шилтемелер колдонулат, алар шилтеме санагычын көбөйтпөйт жана циклди үзүүгө мүмкүндүк берет.
Циклдик шилтеменин мисалы:
class Person {
var apartment: Apartment?
}
class Apartment {
var tenant: Person?
}
let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // бул жерде retain cycle пайда болот
Аны алдын алуу үчүн, шилтемелердин бирин алсыз кылса болот:
class Apartment {
weak var tenant: Person?
}