Junior — Middle
Kaip galima nustatyti išlaikymo ciklus (retain cycle) atmintyje programų kūrimo metu?
sobes.tech AI
Atsakymas iš AI
Išsaugojimo ciklai (retain cycles) atsiranda, kai du ar daugiau objektų vienas kitą nurodo stipriomis nuorodomis, dėl ko atmintis nėra atlaisvinama, net jei objektai jau nebėra reikalingi.
Norint aptikti tokius ciklus iOS, galima naudoti šiuos metodus:
- Instruments įrankis (Leaks ir Allocations): leidžia stebėti atminties nutekėjimus ir matyti, kurie objektai lieka atmintyje.
- Xcode Memory Graph Debugger: vizualizuoja objektus ir jų ryšius, padeda rasti išsaugojimo ciklus.
- Kodo analizė dėl stiprių nuorodų naudojimo uždarymuose ir delegatuose: dažnai ciklai atsiranda dėl stiprių nuorodų uždarymuose (
closure) arba delegatuose, kuriuos reikia pažymėti kaipweakarbaunowned.
Pavyzdys:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // stipri nuoroda į self
}
}
}
Čia ViewController palaiko closure, o closure palaiko self — susidaro ciklas. Norint jo išvengti, naudojama [weak self]:
closure = { [weak self] in
guard let self = self else { return }
print(self)
}
Taip, ciklų aptikimas apjungia profilavimo įrankius ir kruopštų kodo analizę dėl stiprių nuorodų.