Sobes.tech
Junior — Middle

Може ли јака референца у једном ентитету довести до цурења меморије?

sobes.tech АИ

Одговор од АИ

Da, prisustvo jakih veza između objekata u iOS-u može dovesti do curenja memorije, posebno ako dođe do cikličke veze (retain cycle). To se dešava kada dva objekta međusobno drže jake veze, a sistem ARC ne može da ih oslobodi jer brojilac veza oba objekta ne dostiže nulu.

Da bi se sprečila takva curenja, koriste se slabe (weak) ili bezvlasničke (unowned) veze, koje ne povećavaju brojilac veza i omogućavaju prekid ciklusa.

Primer cikličke veze:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // ovde nastaje retain cycle

Da bi se izbeglo curenje, jedna od veza može biti slaba:

class Apartment {
    weak var tenant: Person?
}