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) препратки, които не увеличават броя на препратките и позволяват правилното освобождаване на обектите.