Junior — Middle
Koji koraci su potrebni da bi došlo do ciklusa zadržavanja (Retain Cycle) u memoriji?
sobes.tech АИ
Одговор од АИ
Ciklus zadržavanja (Retain Cycle) u iOS se javlja kada dva ili više objekata međusobno drže snažne reference, čime se sprečava njihovo oslobađanje iz memorije, što izaziva curenje.
Da bi došlo do ciklusa zadržavanja, potrebni su sledeći koraci:
- Objekat A sadrži snažnu referencu na objekat B.
- Objekat B sadrži snažnu referencu na objekat A.
- Nijedan od objekata se ne oslobađa, jer brojač referenci ne dostiže nulu.
Primer:
class A {
var b: B?
}
class B {
var a: A?
}
let a = A()
let b = B()
a.b = b
b.a = a // Ciklus zadržavanja
Da bi se izbegao ciklus, jedna od referenci se učini slabom (weak) ili bez vlasništva (unowned). Na primer:
class B {
weak var a: A?
}
Na ovaj način, ciklus zadržavanja nastaje kada postoje međusobne snažne reference bez prekida, što blokira oslobađanje objekata.