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.