Junior — Middle
Kako se mogu ukloniti ciklične reference u upravljanju memorijom da bi se izbegli curenja?
sobes.tech АИ
Одговор од АИ
Ciklične veze nastaju kada dva ili više objekata međusobno referenciraju, što sprečava automatsko oslobađanje memorije, posebno pri korišćenju brojanja referenci.
Na iOS (Objective-C/Swift), za sprečavanje curenja memorije usled cikličnih veza koriste se:
- Slabe veze (
weak) — ne povećavaju brojač referenci, automatski se postavljaju na nil kada se objekat ukloni. - Neposedne veze (
unowned) — ne povećavaju brojač, ali se ne postavljaju na nil, koriste se kada objekat garantovano postoji.
Na primer, u Swift:
class A {
var b: B?
}
class B {
weak var a: A? // slaba veza za izbegavanje ciklusa
}
Korišćenje weak ili unowned prekida ciklus, omogućavajući ARC da pravilno oslobodi objekte i izbegne curenje memorije.