Junior
Šta je curenje memorije i kako nastaje?
sobes.tech АИ
Одговор од АИ
Iscurenje memorije je situacija u kojoj program dodeljuje memoriju za objekte, ali nakon što oni više nisu potrebni, reference na njih se ne brišu, a sakupljač smeća ne može osloboditi tu memoriju. Na iOS-u, gde se koristi ARC (Automatsko brojanje referenci), curenja memorije često nastaju zbog cikličnih referenci, na primer kada dva objekta međusobno referenciraju jedan drugog putem jakih referenci, i nijedan od njih nije oslobođen.
Primer ciklične reference u Swift-u:
class A {
var b: B?
}
class B {
var a: A?
}
let a = A()
let b = B()
a.b = b
b.a = a
// Oba objekta se međusobno referenciraju, ARC ih ne može automatski osloboditi
Da bi se izbegli curenja, koriste se slabe (weak) ili bezvlasničke (unowned) reference, koje ne povećavaju brojač referenci i omogućavaju pravilno oslobađanje objekata.