Sobes.tech
Junior

Какво е изтичане на памет и как се случва?

sobes.tech AI

Отговор от AI

Изтичане на памет е ситуация, при която програмата заделя памет за обекти, но след като те вече не са необходими, препратките към тях не се изтриват и събирачът на отпадъци не може да освободи тази памет. В iOS, където се използва ARC (Автоматично преброяване на препратките), изтичанията на памет често възникват поради циклични препратки, например когато два обекта се препращат един към друг чрез силни препратки, и никой от тях не се освобождава.

Пример за циклична препратка в Swift:

class A {
    var b: B?
}

class B {
    var a: A?
}

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

a.b = b
b.a = a
// И двата обекта се препращат взаимно, ARC не може автоматично да ги освободи

За да се избегнат изтичанията, се използват слаби (weak) или безвладетелски (unowned) препратки, които не увеличават броя на препратките и позволяват правилното освобождаване на обектите.