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é.