Junior — Middle
Jak lze odhalit cykly udržení (retain cycle) v paměti při vývoji aplikací?
sobes.tech AI
Odpověď od AI
Cyklus uchování (retain cycles) vznikají, když si dva nebo více objektů navzájem odkazují silnými referencemi, což způsobí, že paměť není uvolněna, i když objekty již nejsou potřeba.
Pro detekci těchto cyklů v iOS lze použít následující metody:
- Nástroj Instruments (Leaks a Allocations): umožňuje sledovat úniky paměti a zobrazit, které objekty zůstávají v paměti.
- Xcode Memory Graph Debugger: vizualizuje objekty a jejich spojení, pomáhá najít cykly uchování.
- Analýza kódu na použití silných referencí v uzávěrech a delegátech: často cykly vznikají kvůli silným referencím v uzávěrech (
closure) nebo delegátech, které je třeba označit jakoweaknebounowned.
Příklad:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // silné zachycení self
}
}
}
Zde ViewController udržuje closure, a closure udržuje self — vzniká cyklus. Aby se tomu zabránilo, používá se [weak self]:
closure = { [weak self] in
guard let self = self else { return }
print(self)
}
Tímto způsobem detekce cyklů uchování kombinuje profilovací nástroje a pečlivou analýzu kódu na silné reference.