Sobes.tech
Junior — Middle

Môžeš uviesť hlavné typy únikov pamäte, ktoré sa môžu vyskytnúť pri programovaní v Swift?

sobes.tech AI

Odpoveď od AI

V jazyku Swift sú hlavné typy únikov pamäti spojené s cyklickými odkazmi (retain cycles), ktoré vznikajú, keď si objekty navzájom držia odkazy, a ARC (Automatic Reference Counting) nemôže uvoľniť pamäť. Hlavné prípady:

  • Cyklické odkazy medzi triedami: dva objekty triedy s pevnými odkazmi na seba.
  • Uzávierky zachytávajúce self: ak uzávierka zachytí self bez použitia [weak self] alebo [unowned self], vedie to k cyklu.
  • Pevné odkazy v delegátoch: ak je delegát deklarovaný ako pevný odkaz a objekt delegáta odkazuje späť.

Príklad úniku s uzávierkou:

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

    func setup() {
        closure = {
            print(self) // zachytenie self s pevným odkazom
        }
    }
}

Na zabránenie toho sa používajú slabé odkazy:

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

Takže, hlavné je kontrolovať pevné odkazy a používať slabé alebo bezvlastnícke odkazy tam, kde je to potrebné.