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