Junior — Middle
Lehetséges, hogy ciklikus hivatkozások alakulnak ki, amelyek megakadályozzák az automatik memória kezelésében a szemétgyűjtést?
sobes.tech MI
Válasz az MI-től
Igen, iOS-en az automatikus memória kezelés (ARC) használata során ciklikus hivatkozások (retain cycles) alakulhatnak ki. Ez akkor fordul elő, amikor két vagy több objektum kölcsönösen erős hivatkozásokkal tartja egymást, ami megakadályozza a hivatkozásszámláló nullázását, és így az objektumok nem szabadulnak fel.
Ezek elkerülése érdekében gyenge (weak) vagy tulajdon nélküli (unowned) hivatkozásokat használnak. Például, a delegáltakat általában weak-ként deklarálják, hogy megelőzzék a ciklusokat.
Példa:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // gyenge hivatkozás a ciklus megelőzése érdekében
}
let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john
Ebben a példában, a tenant gyenge hivatkozás, így nem alakul ki ciklus, és az objektumokat a szemétgyűjtő helyesen felszabadítja.