Sobes.tech
Junior — Middle

Vai spēcīga atsauce vienībā var novest pie atmiņas noplūdes?

sobes.tech AI

Atbilde no AI

Jā, stipru saistību klātbūtne starp objektiem iOS var novest pie atmiņas noplūdes, īpaši, ja rodas cikliska saite (retention cycle). Tas notiek, kad divi objekti viens otru tur kopā ar stiprām saitēm, un ARC sistēma tos nevar atbrīvot, jo abu saistīšanas skaitītāji nesasniedz nulli.

Lai novērstu šādus noplūdes, tiek izmantotas vājas (weak) vai bezīpašnieka (unowned) saites, kas nepalielina saistīšanas skaitītāju un ļauj pārraut ciklu.

Cikliskas saites piemērs:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // šeit rodas saistīšanas cikls

Lai novērstu noplūdi, var padarīt vienu no saitēm vāju:

class Apartment {
    weak var tenant: Person?
}