Sobes.tech
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.