Junior — Middle
Kā atklāt noturēšanas ciklus (retain cycle) atmiņā, izstrādājot lietotnes?
sobes.tech AI
Atbilde no AI
Saglabāšanas cikli (retain cycles) rodas, kad divi vai vairāki objekti viens otru atsaucas ar stiprām atsaucēm, kas novērš atmiņas brīvu atbrīvošanu, pat ja objekti vairs nav nepieciešami.
Lai identificētu šādus ciklus iOS, var izmantot šādas metodes:
- Instruments rīks (Leaks un Allocations): ļauj izsekot atmiņas noplūdēm un parādīt, kuri objekti paliek atmiņā.
- Xcode Memory Graph Debugger: vizualizē objektus un to saites, palīdz atrast saglabāšanas ciklus.
- Koda analīze par stipru atsauču izmantošanu aizkavējumos un deleģentos: bieži cikli rodas stipru atsauču dēļ aizkavējumos (
closure) vai deleģentos, kurus nepieciešams atzīmēt kāweakvaiunowned.
Piemērs:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // stipra atsauce uz self
}
}
}
Šeit ViewController uztur closure, un closure uztur self — veidojot ciklu. Lai no tā izvairītos, tiek izmantots [weak self]:
closure = { [weak self] in
guard let self = self else { return }
print(self)
}
Tādējādi saglabāšanas ciklu atklāšana apvieno profilēšanas rīkus un rūpīgu koda analīzi par stiprām atsaucēm.