Sobes.tech
Junior — Middle

Můžeš vyjmenovat hlavní typy úniků paměti, ke kterým může dojít při programování ve Swiftu?

sobes.tech AI

Odpověď od AI

V jazyce Swift jsou hlavní typy úniků paměti spojeny s cyklickými odkazy (retain cycles), které vznikají, když si objekty navzájem drží odkazy, a ARC (Automatic Reference Counting) nemůže uvolnit paměť. Hlavní případy:

  • Cyklické odkazy mezi třídami: dva objekty třídy s pevnými odkazy na sebe.
  • Uzávěry zachycující self: pokud uzávěr zachytí self bez použití [weak self] nebo [unowned self], vede to k cyklu.
  • Pevné odkazy v delegátech: pokud je delegát deklarován jako pevný odkaz a objekt delegáta odkazuje zpět.

Příklad úniku s uzávěrem:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // zachycení self silným odkazem
        }
    }
}

Aby se tomu zabránilo, používají se slabé odkazy:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

Hlavní je kontrolovat pevné odkazy a používat slabé nebo bez vlastnictví odkazy tam, kde je to nutné.