Junior — Middle
Da li je moguće da dođe do cikličnih referenci koje sprečavaju sakupljanje smeća u automatskom upravitelju memorije?
sobes.tech АИ
Одговор од АИ
Da, na iOS, prilikom korišćenja automatskog upravljanja memorijom (ARC), može doći do stvaranja cikličnih referenci (retain cycles). To se dešava kada dva ili više objekata međusobno drže jake reference, što sprečava da se brojač referenci spusti na nulu i objekti budu oslobođeni.
Da bi se izbegle takve situacije, koriste se slabe (weak) ili bezvlasničke (unowned) reference. Na primer, delegati se obično deklaršu kao weak da bi se sprečili ciklusi.
Primer:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // slaba referenca sprečava ciklus
}
let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john
U ovom primeru, tenant je slaba referenca, pa se ciklus ne formira, i objekti će biti ispravno oslobođeni od strane sakupljača smeća.