Sobes.tech
Junior

Mis on mäluleke ja kuidas see tekib?

sobes.tech AI

Vastus AI-lt

Mälu lekkimine on olukord, kus programm eraldab objekti jaoks mälu, kuid pärast nende mittevajalikkuse lõppemist ei eemaldata viiteid neile ning prügikoristaja ei saa seda mälu vabastada. iOS-is, kus kasutatakse ARC-d (Automaatne viidete arv), toimub mälu lekkimine sageli tsükliliste viidete tõttu, näiteks kui kaks objekti viitavad üksteisele tugevate viidetega, ja kumbki neist ei vabastata.

Swiftis tsüklilise viite näide:

class A {
    var b: B?
}

class B {
    var a: A?
}

let a = A()
let b = B()

a.b = b
b.a = a
// Mõlemad objektid viitavad üksteisele, ARC ei saa neid automaatselt vabastada

Väljavoolu vältimiseks kasutatakse nõrku (weak) või omandamata (unowned) viiteid, mis ei suurenda viidete loendurit ning võimaldavad objekti õigesti vabastada.