Sobes.tech
Junior

Kas yra atminties nutekėjimas ir kaip jis atsiranda?

sobes.tech AI

Atsakymas iš AI

Atminties nutekėjimas yra situacija, kai programa skiria atmintį objektams, tačiau po to, kai jie nebėra reikalingi, nuorodos į juos nėra pašalinamos, o šiukšlių surinkėjas negali laisvai atlaisvinti šios atminties. iOS, kur naudojamas ARC (Automatinis nuorodų skaitiklis), atminties nutekėjimai dažnai įvyksta dėl ciklinių nuorodų, pavyzdžiui, kai du objektai vienas kitą nurodo stipriomis nuorodomis, ir nė vienas jų nėra atlaisvinamas.

Swift pavyzdys apie ciklinę nuorodą:

class A {
    var b: B?
}

class B {
    var a: A?
}

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

a.b = b
b.a = a
// Abu objektai nurodo vienas kitą, ARC jų automatiškai atlaisvinti negali

Kad išvengtumėte nutekėjimų, naudojamos silpnos (weak) arba be savininko (unowned) nuorodos, kurios nepadidina nuorodų skaitiklio ir leidžia teisingai atlaisvinti objektus.