Sobes.tech
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 jako weak nebo unowned.

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.